c# - 是否检查null

标签 c# error-handling

我知道您应该始终检查方法的传入参数是否为空。但是,如果我有一个 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,或者我只是在没有 if 的情况下设置它,假设编译器将处理并抛出它是否为 null,这将被捕获并作为在这种情况下,调用者的字符串。

或者应该是

if (refundResponse == null)
                return null;

或者完全检查这个局部变量赋值,然后因为在这种情况下我有一个 try/catch 我正在处理编译器通过将异常作为字符串返回给调用者自然地拾取的任何异常(发回字符串不是我的决定,这是我老板的要求……所以暂时绕过这个争论):

 refundTransactionID = refundResponse.RefundTransactionID;

最终,该方法中的其余代码取决于有效的 refundTransactionID。

最佳答案

异常(exception)情况是特殊情况。如果您可以检查持续错误,请这样做!

关于c# - 是否检查null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2510945/

相关文章:

c# - 工厂模式在工厂类中实例化类

c# - 托管 C++ 库,它是如何工作的?

design-patterns - 观察者模式有哪些常见的错误处理机制?

asp.net-mvc - 如果自定义重定向重定向到 Controller ,则访问异常

node.js - 调用 node.js fork 时处理 "Cannot find module"错误

c# - 如何在 ASP.NET HyperLink 控件中居中图像

c# - 使用参数而不是串联的好处

c# - 如何在WPF中显示一个从右向左滑动效果的窗口

sql - 无法连接到SQL

.net - 为什么发生异常时不显示stacktrace?