Thứ Sáu, 3 tháng 8, 2012

// // Leave a Comment

Return trong khối lệnh Try-Finally C#

Theo thông lệ trong C#, finally sẽ luôn được thực thi nếu khối lệnh try xảy ra lỗi hoặc không!! Hỏi: nếu đặt lệnh return trong khối finally có là hợp lệ hay không ?

- Return và finally có tính tương tranh, ta hiểu chúng có tính "cuối cùng" khi thực thi một khối lệnh hoặc trong một phương thức.
- Vậy chúng thật sự là cuối cùng ??

Chúng ta sẽ thử cài đặt đoạn mã lệnh như sau:
01. Cài đặt sự tương tranh giữa return và finally (không xuất lỗi)


        int f1()
        {
            try
            {
                return 10;
            }
            finally
            {
                return 5;
            }
        }

02. Hoặc sửa lại như sau và có xuất lỗi


        int f2()
        {
            try
            {
                throw new Exception();
            }
            finally
            {
                return 5;
            }
        }


Trong C#, cả hai trường hợp trên đều là không hợp lệ: Các lệnh return là bị cấm trong khối lệnh finally. Đây là sự hạn chế tránh viết mã mang tính mơ hồ gây nhầm lẫn. C# đủ thông minh để làm tất cả các nhiệm vụ của bạn, nhưng không phải ngôn ngữ nào cũng "khuôn khổ" như vậy. Nhưng điều này là hợp lệ trong Python.

0 comments: