C#对象比较
有人能指出重载C#对象比较,c#,comparison,equality,C#,Comparison,Equality,有人能指出重载操作符==来执行深层对象比较(而不是引用比较)的想法吗 来自MSDN: 默认情况下,运算符==通过确定两个引用是否指示同一对象来测试引用相等性。因此,引用类型不必实现运算符==以获得此功能。当类型是不可变的,即实例中包含的数据无法更改时,重载运算符==以比较值相等而不是引用相等可能很有用,因为作为不可变对象,只要它们具有相同的值,就可以认为它们是相同的。在非不变类型中重写运算符==不是一个好主意 它什么时候会真正受益 而且,就像,如果每个对象都有方法Equals,这使得值比较成为可
操作符==
来执行深层对象比较(而不是引用比较)的想法吗
来自MSDN:
默认情况下,运算符==通过确定两个引用是否指示同一对象来测试引用相等性。因此,引用类型不必实现运算符==以获得此功能。当类型是不可变的,即实例中包含的数据无法更改时,重载运算符==以比较值相等而不是引用相等可能很有用,因为作为不可变对象,只要它们具有相同的值,就可以认为它们是相同的。在非不变类型中重写运算符==不是一个好主意
它什么时候会真正受益
而且,就像,如果每个对象都有方法Equals
,这使得值比较成为可能,那么为什么有人会使用x==y
语句执行value(非引用)比较呢
我想我不明白什么,因为这看起来很奇怪。重载
=
操作符可以让你写x==y
,这比x.Equals(y)
更自然,即使x
为空,它也会工作。重载运算符==
只会提高代码的可读性。始终对定义的类型使用.Equals(),尤其是对于深度对象比较。System.String是引用类型的经典示例,它可以从深度值相等比较而不是引用比较中获益
一般来说,在某些情况下,它使代码更容易编写,并且通过值比较比通过引用比较更好地表达等式的含义。注意,Equals(x,y)
也将处理空值。