此异常处理代码需要修复

Noo*_*low 1 .net c#

这是我当前的异常处理代码.

请特别注意throw e;标有的线***.

try
{
  //some code that could cause exception
}
catch (FaultException e) //first catch a particular type of exception only
{
  if (Regex.IsMatch(e.Message, "something")) //satisfying a particular condition
  {
    Console.WriteLine("Particular exception occurred.");
    return;
  }
  else
    throw e; // <-- *** Problem! Not getting caught by the "catch" below.
}
catch (Exception e) //catch all other exceptions
{
  Console.WriteLine("General exception ocurred");
  return;
}
Run Code Online (Sandbox Code Playgroud)

问题是这样的:如果throw e; // <-- ***发生了,它就不会被决赛抓住catch.相反,应用程序只是崩溃,好像没有处理异常.

如何以最简单的方式解决这个问题?

您在第一个中catch看到我只对实际处理FaultException满足特定条件的异常感兴趣,但将所有其他FaultException异常(两个异常都不满足条件异常FaultException)放到最后catch.不幸的是,这不能正常工作.

我在.NET 4上.

jra*_*jav 5

您不完全了解try/catch语法.您可以将多个捕获附加到单个尝试 - 最匹配的捕获是将要选择的捕获.在这种情况下,将触发FaultException的catch,然后将永远不会调用更一般的Exception,因为已经处理了异常.

你需要做的是将整个try/catch包装在另一个try/catch中,专门针对更一般的Exception情况,如果你总是想要处理它; 或者重写你的逻辑.(例如,您可以将其简化为异常捕获,然后检查它是否是FaultException.)