文档指出bool Dictionary<TKey, TValue>.ContainsKey(TKey key)
在传递null键时抛出异常。谁能说出理由呢?如果它刚刚返回false
会不会更实际?
答案 0 :(得分:18)
如果ContainsKey(null)
返回false
,则会产生令人误解的印象,即允许使用空键。
答案 1 :(得分:6)
这是如何实施的: (Source)
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
对于你的问题:
如果它只是返回虚假会不会更实际?
微软的某个人可能会回答这个问题。但是IMO,因为不允许为密钥添加null
值,所以在null
ContainsKey
密钥是没有意义的