检查函数参数的最佳方法:检查null或try/catch

Inn*_*nno 7 c# methods exception-handling robustness

在实现/使用返回或使用对象实例的方法时,检查函数参数的最优雅方法是什么?

致电方法:

someType GetSomething(object x)
{
    if (x == null) {
        return;
    }

    //
    // Code...
    //
}
Run Code Online (Sandbox Code Playgroud)

或更好:

someType GetSomething(object x)
{
    if (x == null) {
        throw new ArgumentNullException("x");
    }

    //
    // Code...
    //
}
Run Code Online (Sandbox Code Playgroud)

通话方式:

void SomeOtherMethod()
{
    someType myType = GetSomething(someObject);

    if (someType == null) {
        return;
    }

}
Run Code Online (Sandbox Code Playgroud)

或更好:

void SomeOtherMethod()
{
    try {
        someType myType = GetSomething(someObject);
    } catch (ArgumentNullException) {
    }
}
Run Code Online (Sandbox Code Playgroud)

浏览类似问题时,不使用try/catch的原因是性能.但恕我直言,尝试捕获只是看起来更好:).

那么,哪种方式更"优雅"?

Ode*_*ded 9

如果传入a null无效,则抛出异常(即 - 这是一种绝不应该发生的特殊情况).

如果一个null参数有效的,返回相应的对象.

一般来说,接受null参数是不好的做法 - 它违背了最不惊讶的原则,并要求调用者知道它是有效的.