C#如何能够复制结构的mem而不能测试相等性?

Fan*_*ius 3 .net c# struct operators

我可以将一个结构的值分配给另一个结构,并自动复制内存.但是如果我想测试两个结构是否包含相同的数据(就好像我刚刚完成了一个赋值),我必须对它进行显式编码.这是为什么?似乎框架应该具有operator == for structs的默认实现.

Sco*_*ski 6

默认实现ValueType.Equals完全符合您的要求.所以,如果你这样做:

s1 = ...;
s2 = ...;
s1.Equals(s2);
Run Code Online (Sandbox Code Playgroud)

对"Equals"的调用将进行您正在寻找的自动深度比较.

通常,C#倾向于不使用重载运算符,这可能是它不实现运算符的原因.

而且,从哲学上讲,C#倾向于回避隐式行为,包括隐式生成方法等.

  • 我还要补充说,stuct中的任何引用类型都将在"深度比较"中调用它们的Equals方法. (3认同)

Gab*_*abe 5

该框架具有默认Equals实现.该==运营商是一个C#的功能,你必须自己实现,使用Equals如果你想.