2010-03-03 89 views
5

我見過一些開發人員在catch塊中使用return語句。爲什麼/何時這將成爲一種有用的技術?catch塊中的返回語句

編輯:我其實只看到了正在使用的返回關鍵字。

感謝

回答

1

公共無效功能() {

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

}

時返回;被擊中時,執行流程跳出該函數。這隻能在void方法上完成。

編輯:你這樣做,如果你不想執行其餘的功能。例如,如果您正在執行文件IO併發生讀取錯誤,則您不想執行處理該文件中的數據的代碼,因爲您沒有它。

7

有些時候,你不關心拋出的異常,只是在嘗試操作失敗。一個例子是在功能的TryParse這pseduo代碼如下所示:

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

這將是有用的,如果你知道函數的返回值應該在catch塊的東西。

例子:

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

我其實剛剛看到了正在使用的return關鍵字。 – dotnetdev 2010-03-03 17:45:36

+0

@dotnetdev:而不是什麼?我正在使用return關鍵字。 – recursive 2010-03-03 17:48:36

+0

對不起,我的意思是「意思」(我其實只是意味着返回關鍵字...使用「)。 – dotnetdev 2010-03-03 17:53:19

1

你可能想捕獲錯誤,記錄它,並說返回值爲false指示,如果函數成功。在其他情況下,您可能想要返回一些在try塊中計算的數據。

1

.Net Framework中的某些方法在沒有良好格式時會引發異常。

一個很好的例子是int.TryParse(object value)

如果你的價值是「10秒」,它會特羅異常。在這種情況下,我們知道這是因爲轉換無效。

所以

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

可能是一個函數,它告訴我們,如果該字符串是一個有效的整數。

如果你在這個問題上使用這種形式,請不要做catch(Exception ex),因爲這樣做會迫使.Net將對象內部的錯誤串行化,這很慢。

另外重要的是要記住,即使你使用try catch塊內的返回值,它仍然會執行finally塊。

所以,如果你的cleaup代碼是在終於內部不要擔心框架將確保調用它。

我的2美分。 N.

+0

我認爲你的意思是'int.Parse',它引發無效格式;'int.TryParse'永遠不會拋出,返回' bool'指示解析成功,並且接受'out int'的第二個參數。僅供參考。 – 2015-08-18 18:32:25

0

任何情況下,如果嘗試失敗,您有其他選擇。 一個例子可以被檢查,如果file可用於一些operation

bool IsComplete = false; 

    try 
    { 
     // FileStream currentWriteableFile = 
        File.OpenWrite(sFileLocation);   
    } 
    catch(Exception) 
    { 
     return false; 
    }