我知道在方法中应该始终检查传入的参数是否为 null。但是,如果我有一个 try/catch 代码块引用了一个局部变量,那么我真的需要在下面检查 null 吗?因为如果 refundResponse 变量为 null 并且下一行代码尝试使用它,try/catch 代码块会捕获到它:
public string DoRefund(...)
{
try
{
......
string refundTransactionID = string.Empty;
......
RefundTransactionResponseType refundResponse = transaction.DoRefund(...);
if (refundResponse != null)
refundTransactionID = refundResponse.RefundTransactionID;
.....
}
catch (Exception ex)
{
LogError(ex);
return ex.ToString();
}
}
记住,我特别指的是本地变量和在方法内部检查它们,而不是方法的传入参数。我在这里问的只是在设置refundTransactionID之前是否需要检查null,还是可以直接设置而不进行if判断,假设编译器会处理并在为null时抛出异常,这个异常将被捕获并作为字符串返回给调用者。
还是应该像下面这样:
if (refundResponse == null)
return null;
或者干脆完全去掉这个本地变量赋值的检查。由于在这种情况下我有一个try/catch,所以通过将异常作为字符串返回给调用者来自然地处理编译器捕获到的任何异常(不是我决定返回字符串,而是我的老板要求的...所以现在就先避免这场辩论):
refundTransactionID = refundResponse.RefundTransactionID;
最终方法中更下面的代码取决于有效的refundTransactionID。