我理解为什么将null传递给HashTable.Contains()不起作用,但我不明白它抛出ArgumentNullException
是什么意思 - 而不仅仅是简单地返回false
?抛出异常有什么好处(除了让我在调用.Contains()
之前进行空检查)?
由[System.ArgumentNullException]引起的 密钥不能为空。
参数名称:键
在System.Collections.Hashtable.ContainsKey(对象键)
在System.Collections.Hashtable.Contains(对象键)
答案 0 :(得分:4)
false
表示哈希表不包含提供的密钥。
需要另一种方式来表明您提供了无效密钥。
您总是可以将HashTable.Contains
包装在另一个执行null检查(或捕获异常)的方法中,并在这种情况下返回false
。
答案 1 :(得分:4)
这是因为传递null
没有意义,因为null
不能成为关键。因此,库会抛出异常,让您知道代码中的其他地方有问题。如果它没有抛出异常,那么追踪出现问题的地方会更加困难。
您可以采取以下措施:
return x == null ? false : HashTable.Contains(x);
......如果你愿意的话。
答案 2 :(得分:1)
你自己提到的一个原因是:“让我做空检查”。其次,你不能说null
包含HashTable
,这没有任何意义。返回false将是一个黑客。
答案 3 :(得分:1)
从语义上讲,每个集合都包含null。因此,返回true而不是false更为正确。当然,这根本不是很有用。抛出异常是处理它的适当方法。