我有许多Func
定义(如30),检查的东西,比如:依赖Func.GetHashCode获取一组Func定义是否安全?
IsLayerEnabled
IsEffectEnabled
...
我想在字典散列这些。是否安全使用:
IsLayerEnabled.GetHashCode()
etc
对于每个Func定义?
或者他们会是每个相同的哈希值?
我有许多Func
定义(如30),检查的东西,比如:依赖Func.GetHashCode获取一组Func定义是否安全?
IsLayerEnabled
IsEffectEnabled
...
我想在字典散列这些。是否安全使用:
IsLayerEnabled.GetHashCode()
etc
对于每个Func定义?
或者他们会是每个相同的哈希值?
他们将为每个代表提供(通常)不同的哈希码。然而,Delegate.GetHashCode(这是为任何代理生成散列)不禁止散列冲突。
这就是说,Dictionary<T,U>
处理哈希碰撞非常好,并与30个元素,你不会有任何真正的问题。
GetHashCode方法适用于散列算法和数据结构,如散列表。
您可以肯定地使用它。我没有看到任何问题。那就是为什么它在那里。
编辑
但是,是的,GetHashCode方法的默认实现不保证针对不同的对象唯一的返回值。此外,.NET Framework不保证GetHashCode方法的默认实现,并且它返回的值在不同版本的.NET Framework之间将保持不变。因此,此方法的默认实现不能用作用于散列目的的唯一对象标识符。
你打算如何在字典中使用Func? Dictionary的声明和用法是什么样的? – 2011-02-02 01:06:18
这是一个很好的问题。我没有想到我想的那么远。现在我意识到,我将无法使用Func(不带类型参数)作为Dictionary的值,对吗? – 2011-02-02 01:09:15
如果它将成为词典中的值,那么将不会使用哈希码......哈希码仅用于Dictionary **键** ... – 2011-02-02 01:11:23