Использование GetHashCode для получения значения типа Enum int

У меня есть перечисление

public enum INFLOW_SEARCH_ON
{
  ON_ENTITY_HANDLE = 0,         
  ON_LABEL = 1,                 
  ON_NODE_HANDLE = 2            
} // enum INFLOW_SEARCH_ON

Я должен использовать это перечисление для поиска в столбце сетки.

Чтобы получить индекс столбца, я использую

  MyEnumVariable.GetHashCode() 

, который работает нормально, или я должен использовать

  (short)MyEnumVariable

. Я немного запутался в использовании GetHashCode () . Есть ли проблемы с его использованием?

24
задан André Gasser 22 August 2019 в 17:49
поделиться

1 ответ

Использование GetHashCode() некорректно. Вы должны привести к int. Использовать его так, как вы делаете, - просить хищников (или Раймонда) прийти и съесть вас.

То, что GetHashCode() возвращает целочисленное значение перечисления, является подробностью реализации и может измениться в будущих версиях .net.

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

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

47
ответ дан 28 November 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: