Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 依赖Func.GetHashCode获取一组Func定义是否安全?_C#_.net_Dictionary_Hashtable - Fatal编程技术网

C# 依赖Func.GetHashCode获取一组Func定义是否安全?

C# 依赖Func.GetHashCode获取一组Func定义是否安全?,c#,.net,dictionary,hashtable,C#,.net,Dictionary,Hashtable,我有许多Func定义(比如30个)来检查一些东西,例如: IsLayerEnabled IsEffectEnabled ... 我想把这些都写进字典里。仅使用以下产品是否安全: IsLayerEnabled.GetHashCode() etc 对于每个Func定义 或者它们的散列值是否相同?该方法适用于散列算法和数据结构(如哈希表) 你可以肯定地使用它。我看这没什么问题。这就是为什么它在那里 编辑 但是,GetHashCode方法的默认实现并不能保证不同对象的唯一返回值。此外,.NET Fr

我有许多
Func
定义(比如30个)来检查一些东西,例如:

IsLayerEnabled
IsEffectEnabled
...
我想把这些都写进字典里。仅使用以下产品是否安全:

IsLayerEnabled.GetHashCode()
etc
对于每个Func定义

或者它们的散列值是否相同?

该方法适用于散列算法和数据结构(如哈希表)

你可以肯定地使用它。我看这没什么问题。这就是为什么它在那里

编辑

但是,GetHashCode方法的默认实现并不能保证不同对象的唯一返回值。此外,.NET Framework不保证GetHashCode方法的默认实现,它返回的值在不同版本的.NET Framework之间是相同的。因此,此方法的默认实现不得用作哈希目的的唯一对象标识符

该方法适用于哈希算法和数据结构,如哈希表

你可以肯定地使用它。我看这没什么问题。这就是为什么它在那里

编辑

但是,GetHashCode方法的默认实现并不能保证不同对象的唯一返回值。此外,.NET Framework不保证GetHashCode方法的默认实现,它返回的值在不同版本的.NET Framework之间是相同的。因此,此方法的默认实现不得用作哈希目的的唯一对象标识符

它们将(通常)为每个委托提供不同的哈希代码。但是,(这是为任何委托生成哈希的内容)并不禁止哈希冲突

也就是说,
Dictionary
可以很好地处理哈希冲突,并且有30个元素,您不太可能有任何实际问题。

它们(通常)会为每个委托提供不同的哈希代码。但是,(这是为任何委托生成哈希的内容)并不禁止哈希冲突



也就是说,
Dictionary
可以很好地处理哈希冲突,并且有30个元素,您不太可能有任何实际问题。

是的,但是它如何处理Func定义?我怎样才能找到实现?是的,但是它如何用于Func定义?如何找到实现?谢谢Reed,我刚刚检查了实现,看起来它们使用了:return base.GetType().GetHashCode();如果它们具有相同的类型参数,这难道不意味着它们将具有相同的哈希值吗?与Func a一样,它也将与Func b相同吗?谢谢,我假设由于依赖的变量很少,GetHashCode无法为Func defs生成足够唯一的哈希。请查看MultiCastDelegate.GetHashCode()以了解实际使用的内容。散列是基于调用数组的,它非常好。也就是说,如果你想验证你没有发生不好的冲突,你总是可以循环通过你的代理并打印出哈希代码…@Joan:我确实相信这个实现在.NET4中被更改了,但是-所以如果你在3.5中,它会发生更多的冲突…谢谢Reed。我也在用v4,但你说Delegate.GetHashCode是用的,不是吗?MultiCastDelegate.GetHashCode是否用于Func defs?谢谢Reed,我刚刚检查了实现,看起来它们使用了:return base.GetType().GetHashCode();如果它们具有相同的类型参数,这难道不意味着它们将具有相同的哈希值吗?与Func a一样,它也将与Func b相同吗?谢谢,我假设由于依赖的变量很少,GetHashCode无法为Func defs生成足够唯一的哈希。请查看MultiCastDelegate.GetHashCode()以了解实际使用的内容。散列是基于调用数组的,它非常好。也就是说,如果你想验证你没有发生不好的冲突,你总是可以循环通过你的代理并打印出哈希代码…@Joan:我确实相信这个实现在.NET4中被更改了,但是-所以如果你在3.5中,它会发生更多的冲突…谢谢Reed。我也在用v4,但你说Delegate.GetHashCode是用的,不是吗?MultiCastDelegate.GetHashCode是否用于Func defs?您计划如何在字典中使用Func?字典的声明和用法是什么样的?这是个好问题。我想我还没想那么多。现在我意识到,我不能使用Func(没有类型params)作为字典的值,对吗?如果它将成为字典中的值,哈希代码将永远不会被使用。。。哈希代码只用于字典键…它们实际上将用作键。我只是想让它看起来像是提供一个id并获取Func,但是对于id,我考虑使用Func def的散列值。我认为我的想法是有缺陷的,这就是一天结束时发生的事情:哦,你打算如何在字典中使用Func?字典的声明和用法是什么样的?这是个好问题。我想我还没想那么多。现在我意识到,我不能使用Func(没有类型params)作为字典的值,对吗?如果它将成为字典中的值,哈希代码将永远不会被使用。。。哈希代码只用于字典键…它们实际上将用作键。我只是想让它看起来像是提供一个id并获取Func,但是对于id,我考虑使用Func def的散列值。我认为我的想法是有缺陷的,这就是一天结束时发生的事情:O