c# - 使用 GetHashCode 获取 Enum int 值

标签 c# enums gethashcode

我有一个枚举

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() 有点困惑。使用有什么问题吗?

最佳答案

使用 GetHashCode() 是不正确的。您应该转换为 int。以你的方式使用它是要求猛禽(或雷蒙德)来吃你。

GetHashCode() 恰好返回枚举的整数值是一个实现细节,可能会在未来的 .net 版本中发生变化。

GetHashCode() 保证如果两个值相等,它们的哈希码也相等。反之亦然。

我的经验法则是,如果 GetHashCode 返回一个常量值,您的程序应该仍能正常工作(但可能会慢很多 ),因为一个常量 GetHashCode 简单地履行了契约(Contract),但分布属性不佳。

关于c# - 使用 GetHashCode 获取 Enum int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4584627/

相关文章:

java - 在java中使用命令行接受文件名

java - Enum.valueOf(Class<T> enumType, String name) 问题

C# 如何为违反 Equals 契约的类选择 Hashcode?

c# - 嵌套对象上的条件 Linq 选择

c# - 查询嵌套集合(父/子)

c# - Visual Studio 在运行程序后向 DataGridView 添加列

Python Enum 在对成员值使用相同的字典时显示奇怪的行为

C# 如何根据对象引用计算哈希码

c# - Double.GetHashCode 算法或覆盖

c# - 找到正确的基地址