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)
02. Hoặc sửa lại như sau và có xuất lỗi
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.
Read More
- 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.