什么情况下_buckets[bucketNumber].key == _buckets && ((_buckets[bucketNumber].hash_coll & unchecked(0x80000000)) == 0)) in Hashtable

问题描述

https://source.dot.net/#System.Private.CoreLib/Hashtable.cs

code

在什么条件下会执行这个逻辑_buckets[bucketNumber].key == _buckets && ((_buckets[bucketNumber].hash_coll & unchecked(0x80000000)) == 0))

当该桶曾经包含一个条目并且在 Remove 中发生冲突时,该键被设置为 _buckets

解决方法

阅读评论很清楚:如果桶存在并且里面没有其他值(即如果它从未使用过),或者如果有一个值(没有冲突)并且后来被删除,从而使桶为空.