2016-10-31 120 views
-1

使用C#我們可以在foreach之外繼續使用嗎?我的意思是我們可以跳過異常情況並轉到下一個記錄驗證?根據我的情況,我必須將代碼重構爲單獨的方法,而不是在foreach循環中使用continue。在foreach循環塊外繼續聲明

foreach (var name in Students) 
{ 

//forloop should continue even if there is any logic exception and move to next record 
CheckIfStudentExist(); 

} 

private void CheckIfStudentExist() 
{ 
try 
{ 
//do some logic to verify if student exist & take to catch if there is some error in logic 
} 
Catch(Exception) 
{ 
continue; 
} 

} 
+1

如果邏輯中出現錯誤,請不要「catch」。您應該只捕獲您無法編碼的異常 - 例如磁盤空間不足或網絡連接丟失。如果你編寫自己的邏輯,你應該確保它是健壯的。儘可能避免'try' /'catch'。 – Enigmativity

回答

1

您不能在循環塊外寫入continue語句。

如果您想讓異常保持沉默,請將catch塊留空。

private void CheckIfStudentExist() 
{ 
    try 
    { 
     //do some logic to verify if student exist & take to catch if there is some error in logic 
    } 
    catch 
    {  
    } 
} 

然而,空catch塊是一個不好的做法。至少在裏面寫一些日誌語句,這樣這個異常不會永遠丟失。

最好聲明我們自己的業務異常類,以便我們可以捕獲特定的異常類型,並讓其他類型(可能致命的異常)停止我們的代碼執行。

private void CheckIfStudentExist() 
{ 
    try 
    { 
     //do some logic to verify if student exist & take to catch if there is some error in logic 
    } 
    catch(ValidationException e) 
    {  
     // example of the log statement. Change accordingly. 
     Log.Error(e, "Validation failed when validating student Id {0}", studentId); 
    } 
} 
+0

你確定那裏不會是一個拋出或程序打破例外塊的情況下只有一個日誌? – Kurkula

+1

@Kurkula是的,如果你有一個catch塊,並且你沒有重新拋出被捕獲的異常或拋出一個新的異常,你的代碼的執行將繼續到catch塊之後的下一個語句。 –