2016-10-31 121 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块之后的下一个语句。 –