2010-03-03 31 views
5

Tôi đã thấy một số nhà phát triển sử dụng câu lệnh trả về trong khối catch. Tại sao/khi nào đây sẽ là một kỹ thuật hữu ích để sử dụng?Báo cáo trả về trong khối catch

EDIT: Tôi thực sự chỉ thấy từ khóa trả về đang được sử dụng.

Cảm ơn

Trả lời

1

public void function() {

try 
{ 
    //some code here 
} 
catch 
{ 
    return; 
} 

}

khi trở lại; được nhấn, luồng thực thi nhảy ra khỏi hàm. Điều này chỉ có thể được thực hiện trên các phương thức void.

EDIT: bạn thực hiện việc này nếu bạn không muốn thực thi phần còn lại của hàm.Ví dụ nếu bạn đang làm tập tin IO và một lỗi đọc xảy ra, bạn không muốn thực thi mã xử lý dữ liệu trong tập tin đó vì bạn không có nó.

7

Có những trường hợp bạn không quan tâm đến ngoại lệ được ném, chỉ có thao tác Thử không thành công. Một ví dụ sẽ là các hàm TryParse trong mã pseduo trông giống như:

try 
{ 
    //attempt conversion 
    return true; 
} 
catch 
{ 
    return false; 
} 
1

Điều này sẽ hữu ích nếu bạn biết giá trị trả về của hàm sẽ nằm trong khối catch.

Ví dụ:

public bool IsDatabaseAvailable() { 
    try { 
     // connect 
     return true; 
    } 
    catch (Exception) { 
     return false; 
    } 
    finally { 
     // clean up 
    } 
} 
+0

Tôi thực sự chỉ thấy từ khóa trả về đang được sử dụng. – dotnetdev

+0

@dotnetdev: Trái với cái gì? Tôi đang sử dụng từ khóa trả lại. – recursive

+0

Xin lỗi tôi có nghĩa là "có nghĩa là" (Tôi thực sự chỉ có nghĩa là từ khóa trở lại ... được sử dụng "). – dotnetdev

1

Bạn có thể muốn bắt lỗi, đăng nhập nó và nói trả về giá trị sai mà chỉ nếu chức năng đã thành công. Trong các trường hợp khác, bạn có thể muốn trả lại một số dữ liệu được tính toán trong khối thử

1

Một số phương pháp bên trong .Net Framework thực hiện ném ngoại lệ khi không có định dạng tốt.

Một ví dụ điển hình là int.TryParse(object value)

nếu giá trị của bạn là "10s" nó sẽ TROW một ngoại lệ. Trong trường hợp này, chúng tôi biết đó là do chuyển đổi không hợp lệ.

Vì vậy

try 
{ 
    int.TryParse(value); 
    return true; 
} 
catch { return false; } 

Có thể là một chức năng mà cho chúng tôi biết nếu chuỗi là một interger hợp lệ.

Nếu bạn sử dụng biểu mẫu đó cho vấn đề này, vui lòng không bắt (Ngoại lệ cũ) khi làm như vậy buộc. Net sắp xếp lại lỗi bên trong đối tượng chậm.

Ngoài ra, điều quan trọng cần nhớ là ngay cả tho bạn sử dụng sự trở lại bên trong khối try catch nó vẫn sẽ thực thi khối cuối cùng.

Vì vậy, nếu mã cleaup của bạn là bên trong cuối cùng đừng lo lắng khuôn khổ sẽ đảm bảo để gọi nó.

2 xu của tôi. N.

+0

Tôi nghĩ bạn có nghĩa là' int.Parse', mà ném trên định dạng không hợp lệ; 'int.TryParse' không bao giờ ném, trả về một' bool' chỉ ra sự thành công của phân tích cú pháp, và lấy một tham số thứ hai 'out int'. –

0

Bất kỳ tình huống nào bạn có thể thay thế nếu không thành công. Một ví dụ có thể được kiểm tra nếu file có sẵn đối với một số operation

bool IsComplete = false; 

    try 
    { 
     // FileStream currentWriteableFile = 
        File.OpenWrite(sFileLocation);   
    } 
    catch(Exception) 
    { 
     return false; 
    } 
Các vấn đề liên quan