【发布时间】:2011-01-31 10:37:07
【问题描述】:
我知道您应该始终检查传入参数的方法是否为 null。但是,如果我在这种情况下使用引用局部变量的 try/catch 怎么办。我真的需要在下面检查 null 吗?因为如果它为 null 并且下一行代码尝试使用refundResponse 变量,它无论如何都会捕获它:
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 还是我只是设置它而不假设编译器将处理并抛出如果它为null 将被捕获并作为返回在这种情况下给调用者的字符串。
或者应该是
if (refundResponse == null)
return null;
或者只是完全检查这个局部变量分配,然后因为在这种情况下我有一个 try/catch,我通过将异常作为字符串返回给调用者来自然地处理编译器拾取的任何异常(发回字符串不是我的决定,这是我老板的要求……所以暂时绕过那个辩论):
refundTransactionID = refundResponse.RefundTransactionID;
最终,该方法后面的代码的其余部分取决于有效的refundTransactionID。
【问题讨论】:
-
捕获所有异常并将响应作为字符串返回对我来说似乎很奇怪,而且通常可能不是很好的编程实践。在某些情况下,您想捕获所有错误 - 想到 Web 服务调度程序 - 但这样的业务逻辑似乎不适合。
-
这是一种网络服务方法..
-
返回字符串取决于 Web 服务的使用方式。你怎么能说不将错误作为字符串返回?那你会返回什么?除了错误消息之外,我没有看到任何有用的返回信息。
标签: c# error-handling