Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#检查异常是否在指定异常列表中的更优雅的方法?_C#_Exception Handling - Fatal编程技术网

C#检查异常是否在指定异常列表中的更优雅的方法?

C#检查异常是否在指定异常列表中的更优雅的方法?,c#,exception-handling,C#,Exception Handling,我需要检查异常是否在指定的异常列表中,当前我的代码如下所示: catch (Exception ex) { if ( (ex is Exception1) || (ex is Exception2) || (ex is Exception3) || (ex is Exception4) || (ex is Exception5) ) { //do something; } } 正如您所看到的,语法不是很优雅。有没有更好/更简洁的方法用C#编写这种类型的表达式 编辑-我正在寻

我需要检查异常是否在指定的异常列表中,当前我的代码如下所示:

catch (Exception ex) {
  if ( (ex is Exception1) || (ex is Exception2) || (ex is Exception3) || (ex is Exception4) || (ex is Exception5) ) { 
    //do something; 
  }
}
正如您所看到的,语法不是很优雅。有没有更好/更简洁的方法用C#编写这种类型的表达式


编辑-我正在寻找一些更好的内置语法来将异常视为类型,这样也许我可以构建这些异常的列表,并使用类似“如果列表对象包含此ex”的内容。无论如何,我认为我现在可以忍受当前代码。

我认为您不应该使用此解决方案。最好在块中捕获每个异常,如下所示:

catch (Exception1 ex) {
}
catch (Exception2 ex) {
}

虽然不是很“漂亮”,但很管用。。如果遇到异常1或异常2中的任何一个,则将执行
//do something
。如果命中另一个异常(由常规的
异常
表示),则该方法将返回,并且不会执行任何操作(它不会执行
//执行某些操作
)。

定义“优雅”吗?没有一个内置的语法可以做到这一点。我能想到的唯一其他方法是类型列表和循环或Linq查询,在我看来,这不太优雅。您应该拥有所有这些异常的干净继承模型,然后捕获所有感兴趣的异常的正确父项。检查这个问题;我们找错树了吗?我的意思是,为什么你需要区分所有这些例外?通常,如果确实需要,只需记录异常信息并采取安全措施退出代码路径。我希望您不是在使用异常驱动代码流。相关:如何对照类型列表检查对象的类型:
public void test()
{
    try
    {
       // do something something
       return;
    }
    catch (Exception1) {}
    catch (Exception2) {}
    catch (Exception){
       return;
    }

    //do something; 
}