空抓块

bub*_*bba 3 c# try-catch

有一个库(我无法控制)包含一个名为Inner的函数,它引发了类型为StupidException的异常.我正在编写一个名为Outer的函数,它调用Inner.我不能提前告诉我什么时候会引发StupidException,我无法以任何合理的方式处理它.我不希望我的函数Outer的调用者看到StupidException - 我将通过从Outer返回null来传达这种情况(由于几个原因).所以,在我看来,最合理的代码是:

public thing Outer()
{
  thing result = null;
  try
  {
     result = Inner();
  }
  catch(StupidException ex)
  {
     // do nothing
  }
  return result;
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了关于空陷阱是如何邪恶的严厉警告,因为它"吞下"异常.吞下异常正是我想要做的事情,实际上,这里空的捕获块对我来说仍然感觉不对.有没有更好的办法?

Dar*_*rov 8

如果这会让你感觉更舒服,你可以从catch块返回,这样它看起来不会是空的:

public thing Outer()
{
    try
    {
        return Inner();
    }
    catch
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果意图是吞下例外,这是正常的.您可能只想验证此内部函数可能抛出的异常类型,以便仅捕获它们而不是捕获所有异常.例如,您可以联系此代码的作者,以询问他们的代码可能抛出的异常类型,然后仅针对这些异常.