首页 > 解决方案 > 处理来自多个方法的异常

问题描述

我有一个看起来像这样的方法

private void Foo()
{
   Method1(var1)
   Method2(var1)
   Method3(var2)
   Method4(var3)
   ...
   //lots of methods in a row like this
}

我将如何在它调用的每个方法上实现异常处理,而不会到处发送垃圾邮件 try-catch 块?我希望异常消息根据导致异常的方法而有所不同。

示例:
Method1()中断:显示用户"You don't have permissions for this"
Method2()中断:显示用户"File contents are not in the right format"
Method3()中断:显示用户"Error at line 3 in file"
等...

标签: c#visual-studio-2019c#-9.0

解决方案


一种非常低技术的方法可能只是使用带有通用参数的Action Delegate来至少过滤您期望得到的异常

public void Check<T>(Action action, string errorMessage ) where T : Exception
{
   try
   {
      action();
   }
   catch (Exception e) when (e is T)
   {
      ShowMessage(errorMessage);
   }
}

用法

Check<IndexOutOfRangeException>(() => Method1(), "oh darn");

不过,就个人而言,我认为这是一个相当可疑的解决方案,您可能应该全面重新考虑您的异常处理策略。简而言之,异常不应该用于流量控制,并且应该在您确切知道如何处理它们时捕获它们。

此外,方法实现可能应该使用 Try 样式的方法(如果它们可用)或捕获并仅在它知道期望它们时处理它们自己的异常。


推荐阅读