Безопасно ли полагаться на Func.GetHashCode для набора определений Func? - PullRequest
1 голос
/ 02 февраля 2011

У меня есть несколько Func определений (например, 30), которые проверяют вещи, например:

IsLayerEnabled
IsEffectEnabled
...

Я хочу хэшировать их в словаре.Безопасно ли просто использовать:

IsLayerEnabled.GetHashCode()
etc

для каждого определения Func?

Или это будет одинаковое хеш-значение для каждого?

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Они будут предоставлять (как правило) разные хэш-коды для каждого делегата.Однако Delegate.GetHashCode (то есть то, что генерирует хеш для любого делегата) не запрещает хеш-коллизии.

При этом Dictionary<T,U> очень хорошо обрабатывает хеш-коллизии, и сэлементы, вы вряд ли будете иметь какие-либо реальные проблемы.

0 голосов
/ 02 февраля 2011

Метод GetHashCode подходит для использования в алгоритмах хеширования и структурах данных, таких как хеш-таблица.

Вы можете использовать это наверняка.Я не вижу никаких проблем в этом.Вот почему его там.

Edit

Но да, реализация по умолчанию метода GetHashCode не гарантирует уникальные возвращаемые значения для различных объектов.Кроме того, .NET Framework не гарантирует реализацию по умолчанию метода GetHashCode, и возвращаемое значение будет одинаковым для разных версий .NET Framework.Следовательно, реализация по умолчанию этого метода не должна использоваться в качестве уникального идентификатора объекта для целей хеширования.

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