c# - 用完全相同的代码合并 catch block ?

标签 c# .net exception-handling try-catch code-reuse

<分区>

出于代码重用的原因,我想合并以下代码中的 catch block :

try
{
    DoSomeInputOutput();
}
catch (InvalidOperationException ex)
{
    HandleKnownException1(ex);
}
catch (InvalidDataException ex)
{
    HandleKnownException1(ex);
}
catch (ArgumentNullException ex)
{
    HandleKnownException1(ex);
}
catch (ArgumentOutOfRangeException ex)
{
    HandleKnownException2(ex);
}
catch (ArithmeticException ex)
{
    HandleKnownException2(ex);
}
catch (InvalidCastException ex)
{
    HandleKnownException2(ex);
}
catch (Exception ex)
{
    HandleUnknownException(ex);
}

像这样:

try
{
    DoSomeInputOutput();
}
catch (InvalidOperationException ex)
catch (InvalidDataException ex)
catch (ArgumentNullException ex)
{
    HandleKnownException1(ex);
}
catch (ArgumentOutOfRangeException ex)
catch (ArithmeticException ex)
catch (InvalidCastException ex)
{
    HandleKnownException2(ex);
}
catch (Exception ex)
{
    HandleUnknownException(ex);
}

这有可能吗?

谢谢。

最佳答案

大概,您在不止一个地方做这件事。如果是这样,你为什么不这样做:

{
    DoSomeInputOutput();
}
catch (Exception ex)
{
    HandleInputException(ex);
}

void HandleInputException(Exception ex)
{
   if (ex is InvalidOperationException || ex is InvalidDataException || ex is ArgumentNullException)
   {
     HandleKnownException1 (ex);
   }
   else if ...
   else if ...
}

关于c# - 用完全相同的代码合并 catch block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1893209/

相关文章:

c# - Button.Visible = true;在功能中激活时无法将按钮设置为可见

c# - 如何使用 dapper 返回包​​含其他类型列表的类型?

c# - ODBC 连接问题 : Function Sequence error when executing anything

.net - 在 .net 中使用 start.process 运行 R 脚本

java - Java 中的 try 是做什么的?

php - 当mysqli INSERT失败时,catch不报告错误。

c - 从捕获浮点异常返回

c# - 我应该如何防御性地编程?

c# - 对于非漫游用户,我应该在哪里存储机器范围的应用程序设置?

c# - 当消费者不堪重负时,如何让快速生产者暂停?