c# - 处理来自多个方法的异常
问题描述
我有一个看起来像这样的方法
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"
等...
解决方案
一种非常低技术的方法可能只是使用带有通用参数的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 样式的方法(如果它们可用)或捕获并仅在它知道期望它们时处理它们自己的异常。
推荐阅读
- r - 如何为我定义的计算创建一个函数?
- excel - 如何通过标签、标签名称获取元素,然后点击标签位置(不工作)//镜像iMacros程序(工作)
- mvvm - 如何观察自定义表面视图生成的数据
- python - Numpy,如何将列名添加到 Numpy 数组
- c# - 是否可以通过 httpwebrequest 使用 WCF 服务(托管为 Windows 服务托管)?
- spring - 如何从基于 Java 的应用程序向地理服务器(或任何其他类型)发出请求?
- python - 连接中的 ModuleNotFoundError
- spring - 在@WebMvcTest 中指定@SpringBootApplication
- node.js - 在 Azure 上上传 sendGrid 或 nodemailer 时出现意外令牌
- javascript - 使用多个下拉切换无法按预期工作