我有一些看起来像这样的代码:
string TheString = string.Empty;
try
{
TheString = SomeDangerousMethod();
}
catch
{
TheString = SomeSaferMethod();
}
return TheString;
事实证明SomeSaferMethod
不是那么安全,在某些边缘情况下也会失败。出于这个原因,我创建了一个名为SuperSafeMethod
的方法,如果SomeSaferMethod
在catch语句中也失败,我想调用它。
我如何更改try catch,以便在SomeDangerousMethod
和SomeSaferMethod
失败时触发第三级执行?
感谢。
答案 0 :(得分:12)
也许可以使用嵌套的try/catch
:
try
{
TheString = SomeDangerousMethod();
}
catch
{
try
{
TheString = SomeSaferMethod();
}
catch
{
TheString = SuperSaferMethod();
}
}
return TheString;
答案 1 :(得分:6)
您可以执行以下操作以避免嵌套。这允许您以更干净的方式使用任意数量的方法。
Func<string>[] methods = { SomeDangerousMethod, SomeSaferMethod, SuperSafeMethod };
foreach(var method in methods)
{
try
{
TheString = method();
break;
}
catch { }
}
if (string.IsNullOrEmpty(TheString))
throw new TooMuchUnsafetyException();