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的原因是性能.但恕我直言,尝试捕获只是看起来更好:).
那么,哪种方式更"优雅"?
如果传入a null无效,则抛出异常(即 - 这是一种绝不应该发生的特殊情况).
如果一个null参数是有效的,返回相应的对象.
一般来说,接受null参数是不好的做法 - 它违背了最不惊讶的原则,并要求调用者知道它是有效的.