Если Вы действительно просто возвращаете предопределенное, фиксированное значение, Вы могли бы создать словарь со всеми возможными входными индексами как ключи, наряду с их соответствующими значениями. Кроме того, Вы не могли бы действительно хотеть, чтобы функция сделала это - если Вы не вычисляете возвращаемое значение так или иначе.
, О, и если Вы испытываете желание делать что-то подобное переключателю, см. здесь .
System.Array
не переопределяет GetHashCode
или Equals
, поэтому они используют ссылочное равенство. Поэтому вы не должны их вызывать.
Чтобы реализовать GetHashCode
, см. этот вопрос .
Чтобы реализовать Equals
, используйте Метод расширения SequenceEqual
.
РЕДАКТИРОВАТЬ : В .Net 2.0 вам придется написать свою собственную версию SequenceEqual
, например:
public static bool SequenceEquals<T>(IList<T> first, IList<T> second) {
if (first == second) return true;
if (first == null || second == null) return false;
if (first.Count != second.Count) return false;
for (int i = 0; i < first.Count; i++)
if (!first[i].Equals(second[i]))
return false;
return true;
}
Вы можете написать его, чтобы взять IEnumerable
вместо IList
, но это '
Очень важно убедиться, что вы сохранили переопределение .GetHashCode () в шаге с помощью .Equals ().
По сути, вы должны убедиться, что они рассматривать одни и те же поля, чтобы не нарушать первое из трех правил GetHashCode (из объекта MSDN.GetHashCode () )
Если два объекта сравниваются как равные, GetHashCode для каждого объекта должен возвращать то же значение. Однако, если два объекта не сравниваются как равно, методы GetHashCode для два объекта не должны возвращаться разные значения.
Другими словами, вы должны убедиться, что каждый раз, когда .Equals считает два экземпляра равными, у них также будет один и тот же .GetHashCode ().
Как упоминалось здесь кем-то другим, этот вопрос подробно описывает хорошую реализацию. Если вам интересно, в начале прошлого года я написал в блоге несколько статей об исследовании хэш-кодов. Вы можете найти мои рассуждения здесь (первая запись в блоге, которую я написал по этой теме)
Хорошее обсуждение проблем здесь , а самое последнее обновление относится к абстрактному классу BaseObject , предоставленному SharpArchitecture.
Если вам нужно что-то еще ad hoc , я обнаружил, что код, который ReSharper генерирует для Equals () и GetHashCode (), подходит.