2009-08-28 93 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率。