2009-08-28 92 views
1

this question。我们发现,在.NET 1.1,Array.IndexOf(array, value)搜索元素与其中.Equals()方法使用

value.Equals(arrayElement) == true 

而.NET 2.0改成了搜索元素与

arrayElement.Equals(value) == true 

显然,两个结果之间的电位差产生于多态性,但是有什么理由为什么后者版本更可取?更一般地说,如果我有两个对象ab进行比较,是否有任何理由更喜欢a.Equals(b)b.Equals(a)

+0

==真是我的祸根。 – recursive 2009-08-28 14:20:04

+2

虽然我同意你@recursive,但在这种情况下,它强调了代码片断的重点。 – 2009-08-28 14:23:33

+0

我不会写'if(value.Equals(arrayElement)== true)',但正如Austin所说,在这种情况下,重点似乎很有用。 – stevemegson 2009-08-28 14:26:30

回答

2

我想这样做是为了避免出现问题,当您将Equals覆盖在您要输入的对象IndexOf中时。换句话说,如果你有class Foo一些怪异Equals实现,这一点:

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

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

+0

但是,你是否有可能在存储在数组中的对象上出现奇怪的'Equals'覆盖?他们似乎同样有风险,但由于它可能是一个突破性的改变,所以感觉MS应该有理由去改变。 – stevemegson 2009-08-28 14:45:17

0

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