在try-catch都失败的情况下执行一个方法

本文关键字:一个 方法 执行 try-catch 失败 情况下 | 更新日期: 2023-09-27 18:23:54

我有一些代码如下所示:

string TheString = string.Empty;
try
{
  TheString = SomeDangerousMethod();
}
catch
{
  TheString = SomeSaferMethod();
}
return TheString;

结果表明,SomeSaferMethod并不那么安全,在某些边缘情况下也可能发生故障。因此,我创建了一个名为SuperSafeMethod的方法,以防SomeSaferMethod在catch语句中也失败。

如何更改try-catch,以便在SomeDangerousMethodSomeSaferMethod都失败时触发第三级执行?

在try-catch都失败的情况下执行一个方法

也许可以使用嵌套的try/catch

try
{
    TheString = SomeDangerousMethod();
}
catch
{
  try
  {
      TheString = SomeSaferMethod();
  }
  catch
  {
      TheString = SuperSaferMethod();
  }
}
return TheString;

您可以执行以下操作来避免嵌套。这允许您以更干净的方式使用任意多的方法。

Func<string>[] methods = { SomeDangerousMethod, SomeSaferMethod, SuperSafeMethod };
foreach(var method in methods)
{
   try
   {
       TheString = method();
       break;
   }
   catch { }
} 
if (string.IsNullOrEmpty(TheString))
    throw new TooMuchUnsafetyException();