C# 处理顶级异常
捕获顶级异常是一种糟糕的做法,原因有很多。然而,有时开发人员并不关心操作是否失败 例如,有一种方法基于文件初始化变量,但变量已经具有有效值。开发人员可能不关心读取失败的原因 在这种情况下,捕获一般异常可能是有效的(可能是?),但系统异常除外(无内存、io错误等)。这是一个有效的模式吗 (请注意,该示例已根据@stuard注释进行了更新。)C# 处理顶级异常,c#,exception,C#,Exception,捕获顶级异常是一种糟糕的做法,原因有很多。然而,有时开发人员并不关心操作是否失败 例如,有一种方法基于文件初始化变量,但变量已经具有有效值。开发人员可能不关心读取失败的原因 在这种情况下,捕获一般异常可能是有效的(可能是?),但系统异常除外(无内存、io错误等)。这是一个有效的模式吗 (请注意,该示例已根据@stuard注释进行了更新。) 如果用户不关心文件读取结果,那么您应该捕获IOException,而不是Exception 用户应该关注哪些错误: try { operation_whi
如果用户不关心文件读取结果,那么您应该捕获
IOException
,而不是Exception
用户应该关注哪些错误:
try {
operation_which_can_fail();
}
catch (IOException) {
// We don't care about files, reading, permissions etc.
// Since "...variables already have valid values..." we can ignore the problem
}
catch (Exception) {
// Write some log : we have some unexpected problem
...
// rethrow exception : we don't want to swallow unknown problem warning
throw;
}
捕获一个异常,然后只是重新引用它是没有意义的。如果用户对文件读取不感兴趣,您可以捕获
IOException
,但不能捕获exception
,这是用户应该关心的问题about@stuartd很好,在绘制过程中忘记了下一行会抓住它。我们将修改这个问题。这肯定是一个解决方案,但是,开发人员必须了解IOException
。但是NullReferenceException
呢?或任何其他非系统异常?我的目标是避免使用正常的异常处理逻辑(我在大多数情况下都会使用这种逻辑),而是处理最高级别的错误。但答案可能是,这样做是不可能的。
try {
operation_which_can_fail();
}
catch (IOException) {
// We don't care about files, reading, permissions etc.
// Since "...variables already have valid values..." we can ignore the problem
}
catch (Exception) {
// Write some log : we have some unexpected problem
...
// rethrow exception : we don't want to swallow unknown problem warning
throw;
}