使用GetHashCode获取Enum int值

Moh*_*tha 24 c# enums gethashcode

我有一个枚举

public enum INFLOW_SEARCH_ON
{
  ON_ENTITY_HANDLE = 0,         
  ON_LABEL = 1,                 
  ON_NODE_HANDLE = 2            
} // enum INFLOW_SEARCH_ON
Run Code Online (Sandbox Code Playgroud)

我必须使用这个枚举来在网格列中进行搜索

获取我正在使用的列索引

  MyEnumVariable.GetHashCode() 
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,或者我应该使用

  (short)MyEnumVariable
Run Code Online (Sandbox Code Playgroud)

我对使用GetHashCode()感到困惑.使用它有什么问题吗?

Cod*_*aos 47

使用GetHashCode()不正确.你应该施展int.以你的方式使用它是要求猛禽(或雷蒙德)来吃你.

GetHashCode()恰好返回枚举的整数值是一个实现细节,并可能在.net的未来版本中更改.

GetHashCode()保证如果两个值equal的哈希码也相等.反过来不保证.

我的经验法则是,如果GetHashCode要返回一个常量值,你的程序应该仍能正常工作(但可能慢得多),因为常量通常很少GetHashCode地履行合同,但是具有错误的分布属性.

  • 好点但是这样的改变是不太可能的,因为我认为使用枚举的默认int值以外的任何东西都没有什么好处.(这也将是一个突破性的变化) (2认同)

Vij*_*mma 6

当我进行分析时, Enum.GetHashCode 花费了很多周期。我能够通过在可能的情况下使用 (int)Enum 来改进它。


naw*_*fal 6

其他人已经说过为什么转换为 int 更好。

不使用的另一个原因GetHashCode性能。它导致拳击。在我的快速测试中,速度GetHashCode慢了大约 50 倍(如果重要的话)。


Pau*_*erø 5

您应该(int)MyEnumVariable用于获取文字值...您也可以使用另一种方式进行转换,例如(INFLOW_SEARCH_ON)int