加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何重载等于运算符==真的有用吗?

发布时间:2020-12-15 23:28:26 所属栏目:百科 来源:网络整理
导读:我在MyClass中有这段代码: public static bool operator ==(MyClass lhs,MyClass rhs){ if (lhs == null || rhs == null) return false; // Other operations to check for equality} 在代码的第一行,我将lhs和rhs比较为null.我不确定,但我想比较本身会再次
我在MyClass中有这段代码:

public static bool operator ==(MyClass lhs,MyClass rhs)
{
    if (lhs == null || rhs == null)
        return false;

    // Other operations to check for equality
}

在代码的第一行,我将lhs和rhs比较为null.我不确定,但我想比较本身会再次调用重载函数.然后我们又回到那条线上,它会调用自己,等等.无限递归的排序.
但我们都知道不会发生.在我看来,这意味着与null比较不会调用相等重载.那真的发生了什么?如何与null工作比较?

解决方法

编辑

我纠正了.它会递归调用==运算符(至少在LinqPad 4.5中),而不是绑定到object.==.有三种方法可以解决这个问题:

>如果你真的想要值相等语义,那么重载等于.
>将lhs和rhs投射到物体上
>使用Object.ReferenceEquals作为MSDN指南推荐

I suppose that comparison itself will invoke the overload function again

No – null不是MyClass,因此调用使用==的默认含义,即引用相等.

还要注意,guidelines for overloading ==声明它只应该为不可变类型重载,因为==的预期行为是引用相等,这是默认情况下发生的.等于意味着“价值平等”的语义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读