扔或不扔

ser*_*hio 17 language-agnostic exception-handling

//
// To Throw
void PrintType(object obj)
{
    if(obj == null) 
    {
        throw new ArgumentNullException("obj")
    }
    Console.WriteLine(obj.GetType().Name);    
}

//
// Not to Throw
void PrintType(object obj)
{
    if(obj != null)
    {
        Console.WriteLine(obj.GetType().Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

保持什么原则?

我个人更喜欢一个说开发人员友好(通知每个"异常").第二个说它用户友好(让用户继续工作,即使"内部"并非一切正常).

我认为,当您默默地让事情继续下去时,在维护阶段发现错误和错误会更复杂.如果出现问题,您不会立即得到通知,有时会出现远离主要错误原因的错误,并花费大量时间来查找错误.

你怎么看?

小智 33

第二个是致命的.默默地失败总是错误的做法.假设这是持有您帐户的银行中的银行系统.如果支付你的工资有问题并且系统默默地忽略它,你会喜欢它吗?

  • +1:假装错误不存在是如何"友好"的? (6认同)
  • 它取决于每个函数的不变量.*null*是有效值吗?参数是可选的吗?如果它是应用程序中的错误,那么中止应该是方式,如果它是罕见的异常情况,那么投掷是合适的.否则,如果参数是可选的,则忽略它是合适的. (3认同)

Pru*_*der 7

如果方法体正确处理null obj(换句话说,obj!= null不是必需的),那么就不需要抛出异常.

在所有其他情况下:投掷.让客户对其有缺陷的输入负责.