Какой метод .Equals () использовать - PullRequest
1 голос
/ 28 августа 2009

В этот вопрос . мы обнаружили, что в .NET 1.1, Array.IndexOf(array, value) искал элемент с

value.Equals(arrayElement) == true

, тогда как .NET 2.0 изменил его, чтобы искать элемент с

arrayElement.Equals(value) == true

Очевидно, что разность потенциалов между двумя результатами обусловлена ​​полиморфизмом, но есть ли причина, почему последняя версия предпочтительнее? В более общем смысле, если у меня есть два объекта a и b для сравнения, есть ли веская причина предпочесть a.Equals(b) или b.Equals(a)?

Ответы [ 2 ]

2 голосов
/ 28 августа 2009

Я полагаю, это сделано, чтобы избежать проблем при переопределении Equals в объекте, в который вы вводите IndexOf. Другими словами, если у вас есть class Foo с какой-то странной Equals реализацией, это:

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

может потенциально нарушить поведение и привести к странным результатам.

0 голосов
/ 28 августа 2009

Просто предположение, но версия 1.1 могла иметь более высокий уровень исключений NullReferenceException по сравнению с версией 2.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...