文档指出,bool Dictionary<TKey, TValue>.ContainsKey(TKey key)
如果传递了空键,则会引发异常。谁能给出一个理由?直接退货不是更实用false
吗?
问问题
13710 次
2 回答
22
如果ContainsKey(null)
返回false
,它会给人一种误导性的印象,即允许使用空键。
于 2013-12-06T15:48:33.607 回答
6
这是它的实现方式:(来源)
public bool ContainsKey(TKey key) {
return FindEntry(key) >= 0;
}
方法FindEntry
为:
private int FindEntry(TKey key) {
if( key == null) {
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
}
if (buckets != null) {
int hashCode = comparer.GetHashCode(key) & 0x7FFFFFFF;
for (int i = buckets[hashCode % buckets.Length]; i >= 0; i = entries[i].next) {
if (entries[i].hashCode == hashCode && comparer.Equals(entries[i].key, key)) return i;
}
}
return -1;
}
由于null
不允许将值作为字典中的键。
Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary.Add(null, 10);
上面会产生一个异常:
值不能为空。参数名称:key
对于您的问题:
如果它只是返回false,那不是更实用吗?
微软的某个人可能会回答这个问题。但是 IMO,由于不允许为 key 添加值,因此检查key innull
是没有意义的null
ContainsKey
于 2013-12-06T15:54:37.293 回答