Есть ли в c # такие же проблемы, как в Java с equals и gethashcode ()? - PullRequest
2 голосов
/ 16 апреля 2010

Имеет ли c # те же проблемы, что и Java с equals и gethashcode?

вопросов, таких как: http://onjava.com/pub/a/onjava/2006/09/13/dont-let-hibernate-steal-your-identity.html

Ответы [ 2 ]

12 голосов
/ 16 апреля 2010

Если вы имеете в виду, что равенство трудно определить, когда речь идет о наследовании, да.

Однако .NET имеет интерфейс IEqualityComparer<T>, который часто используется для равенства и хэширования - для таких контейнеров, как Dictionary<TKey, TValue>. Почти все в структуре, которая нуждается в равенстве / хешировании, позволяет определять поведение с помощью IEqualityComparer<T>, что означает, что вы можете выражать любое понятие равенства, которое хотите, если форма, заданная самим типом, не подходит для ваших нужд.

3 голосов
/ 16 апреля 2010

Не знаю, о каких проблемах вы говорите, так как вы немного расплывчаты ...

Но если вы имеете в виду, что у вас есть , то (если вы не хотите, чтобы предупреждение компилятора или, возможно, неожиданное поведение в вашем коде) переопределяли GetHashCode при переопределении Equals, тогда да .

...