C# 要使用哪个.Equals()方法

C# 要使用哪个.Equals()方法,c#,.net,polymorphism,C#,.net,Polymorphism,在。我们发现在.NET1.1中,Array.IndexOf(Array,value)搜索具有 value.Equals(arrayElement) == true arrayElement.Equals(value) == true 而.NET2.0将其更改为搜索具有 value.Equals(arrayElement) == true arrayElement.Equals(value) == true 显然,这两个结果之间的潜在差异来自多态性,但有什么理由认为后一个版本更可取?更一般

在。我们发现在.NET1.1中,
Array.IndexOf(Array,value)
搜索具有

value.Equals(arrayElement) == true
arrayElement.Equals(value) == true
而.NET2.0将其更改为搜索具有

value.Equals(arrayElement) == true
arrayElement.Equals(value) == true

显然,这两个结果之间的潜在差异来自多态性,但有什么理由认为后一个版本更可取?更一般地说,如果我有两个对象
a
b
要比较,有没有什么好的理由选择
a.Equals(b)
b.Equals(a)

我想这样做是为了避免在对象中重写
Equals
时出现问题。换句话说,如果您有
类Foo
和一些奇怪的
Equals
实现,这:

Foo f = new Foo();
Bar b = arrayOfDateTimes.IndexOf(f);

可能会破坏行为并产生奇怪的结果。

只是猜测,但与2.0版本相比,1.1版本的NullReferenceException发生率可能更高。

虽然我同意@recursive的观点,但在这种情况下,它强调了代码片段的要点。如果(value.Equals(arrayElement))我不会编写
==true)
,但正如奥斯汀所说,在这种情况下,强调似乎很有用。但是,你不也很可能在数组中存储的对象上有一个奇怪的
Equals
覆盖吗?他们似乎也有同样的风险,但由于这可能是一个突破性的改变,让人觉得微软应该有理由费心改变。