为什么HashTable.Contains()只是在传递null时才返回false?

时间:2010-06-16 13:35:11

标签: c# .net

我理解为什么将null传递给HashTable.Contains()不起作用,但我不明白它抛出ArgumentNullException是什么意思 - 而不仅仅是简单地返回false ?抛出异常有什么好处(除了让我在调用.Contains()之前进行空检查)?

  

由[System.ArgumentNullException]引起的   密钥不能为空。
  参数名称:键
  在System.Collections.Hashtable.ContainsKey(对象键)
  在System.Collections.Hashtable.Contains(对象键)

4 个答案:

答案 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更为正确。当然,这根本不是很有用。抛出异常是处理它的适当方法。