Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#对象比较_C#_Comparison_Equality - Fatal编程技术网

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)
也将处理空值。