如何在C#开关发生异常后继续

时间:2012-10-09 11:08:28

标签: c# loops exception-handling switch-statement

如何在发生异常后继续循环?

    foreach (var oItem in List<Client>)
        switch (oItem.Name)
        {
         case "one":
         {
            break;
         }


         case "two":
         case "three":
         {
            break;
         }


        }

}

当在块情况下一个抛出异常时,我想继续阻塞两个或另一个块取决于循环的值。

可能吗?

因为每个案例都代表从每个客户端通过FTP下载数据,所以当客户端的数据抛出异常时,并不意味着客户端的其他数据也不好。 在循环结束时,我将输出已下载的客户端数据以及哪个数据不良

提前谢谢你, 甜菊

4 个答案:

答案 0 :(得分:3)

将抛出异常的代码放在try / catch块中。

case "one":
{
    try
    {
        //Code that may break
    }
    catch (Exception ex)
    {
        //Deal with the exception
    }
    break;
 }

但是你真的应该找出为什么它会抛出异常,并确保如果你处于导致异常发生的情况下你不执行代码。< / p>

答案 1 :(得分:2)

为此,你需要通过像

这样的代码传递异常

注意:如果可能在seprate文件中记录异常,以便您可以获取有关哪些项目获得异常的信息

 foreach (var oItem in List<Client>)
{
   try
    {
            switch (oItem.Name)
            {
             case "one":
             {

             }
             break;

             case "two":
             case "three":
             {

             }
             break;

            }
   }
   catch(Exception ex){ // log exception }
}

答案 2 :(得分:0)

如果在循环内捕获异常,循环将继续

答案 3 :(得分:0)

foreach (var oItem in List<Client>)
{
   ret_val=call_switch(oItem.Name);
}
------------
private string call_switch(string val_str)
{
   string ret_val="";
    try
    {
           switch (oItem.Name)
            {
             case "one":
             {
               ret_val="valuee.. ";
             }
             break;

             case "two":
             case "three":
             {

             }
             break;

            }

   }
   catch(Exception ex){ //... }
   return ret_val;
}