【问题标题】:Is ReferenceEquals(null, obj) the same thing as null == obj?ReferenceEquals(null, obj) 和 null == obj 是一样的吗?
【发布时间】:2011-02-23 23:52:47
【问题描述】:

是一样的吗?

if (ReferenceEquals(null, obj)) return false;

if (null == obj) return false;

【问题讨论】:

    标签: c#


    【解决方案1】:

    您通常会在 == 运算符的实现中看到这一点。

    例如:

    public static bool operator ==(Foo f1, Foo f2)
    {
        if (ReferenceEquals(f1, f2))
        {
            return true;
        }
        if (ReferenceEquals(f1, null) || ReferenceEquals(f2, null))
        {
            return false;
        }
        // Now do comparisons
    }
    

    你不想使用:

    if (f1 == f2)
    

    因为这将递归到相同的代码中!另一种选择是:

    if ((object)f1 == (object)f2)
    

    (对于空检查也是如此。)

    【讨论】:

      【解决方案2】:

      如果obj 被输入为object 也是一样的。

      如果变量的类型定义了静态相等运算符或空运算符,则不同;如果obj 定义为Nullable<T>,那么编译器将介入并检查HasValue

      【讨论】:

        猜你喜欢
        • 2023-04-02
        • 1970-01-01
        • 2019-10-07
        • 1970-01-01
        • 1970-01-01
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 2012-09-10
        相关资源
        最近更新 更多