2011-02-02 24 views
1

我有许多Func定义(如30),检查的东西,比如:依赖Func.GetHashCode获取一组Func定义是否安全?

IsLayerEnabled 
IsEffectEnabled 
... 

我想在字典散列这些。是否安全使用:

IsLayerEnabled.GetHashCode() 
etc 

对于每个Func定义?

或者他们会是每个相同的哈希值?

+0

你打算如何在字典中使用Func? Dictionary的声明和用法是什么样的? – 2011-02-02 01:06:18

+0

这是一个很好的问题。我没有想到我想的那么远。现在我意识到,我将无法使用Func(不带类型参数)作为Dictionary的值,对吗? – 2011-02-02 01:09:15

+1

如果它将成为词典中的值,那么将不会使用哈希码......哈希码仅用于Dictionary **键** ... – 2011-02-02 01:11:23

回答

1

他们将为每个代表提供(通常)不同的哈希码。然而,Delegate.GetHashCode(这是为任何代理生成散列)不禁止散列冲突。

这就是说,Dictionary<T,U>处理哈希碰撞非常好,并与30个元素,你不会有任何真正的问题。

0

GetHashCode方法适用于散列算法和数据结构,如散列表。

您可以肯定地使用它。我没有看到任何问题。那就是为什么它在那里。

编辑

但是,是的,GetHashCode方法的默认实现不保证针对不同的对象唯一的返回值。此外,.NET Framework不保证GetHashCode方法的默认实现,并且它返回的值在不同版本的.NET Framework之间将保持不变。因此,此方法的默认实现不能用作用于散列目的的唯一对象标识符。