我没有太多的异常经验,我试图弄清楚如何在现实场景中正确使用异常处理。在C#。
在这个例子中,我有一个顶级函数LoadModel,它调用许多其他函数(调用其他函数,......):
class Core
{
public void LoadModel(string file_name)
{
try
{
// call other functions (that call other functions, …) that may throw exceptions
}
catch (Exception ex)
{
if (ex is ArgumentNullException ||
ex is ArgumentException ||
ex is EncoderFallbackException ||
ex is InvalidOperationException ||
ex is XmlException ||
ex is InvalidDataException ||
ex is IOException)
{
// show error message
}
else
{
// unsupported exception. system may be unstable. let it crash.
throw;
}
}
}
}
我遵守这条规则:
问题:这是处理异常的方法吗?即我检查我的保护代码产生了什么异常(考虑所有嵌套函数),决定从哪个恢复是安全的并将它们放入高级别的catch中。我可以从他们的文档中获取.NET函数的异常列表,对于我自己的函数,我应该在他们的文档中保留异常列表。并且这个异常列表倾向于积累:一个函数可以抛出它自己的异常和嵌套函数的异常......。这似乎容易让我感到错误。有人在某些嵌套函数中添加了新的异常,并且您的顶级catch不会处理它。使用错误代码,您可以执行类似“if(error!= SUCCESS)”的操作来捕获所有错误,但是您不能使用异常(如果您不想使用空捕获)。
答案 0 :(得分:2)
您可以以级联方式捕获多种异常:
try
{
//some code
}
catch (NonGenericException nonGenericEx)
{
}
catch (MoreGenericException moreGenericEx)
{
}
catch (Exception mostGenericException)
{
}
finally
{
//this code will always be executed
}