一般而言,有关词典的两种用法模式中的哪一种应该是首选



在我一直在处理的代码库中,我发现了这样的用法模式:

If (dict.ContainsKey(key)) // dict is of type IDictionary
{
  throw ...;
}
else
{
  dict.Add(key, …);
}

这涉及两个搜索过程调用(ContainsKey []/Add),无论代码所采用的分支哪个分支。我想知道以下模式是否会更有效,一般应该是首选。它仅涉及一个搜索过程调用,但此外还依靠异常系统工作,预计将有一些运行时开销。

try
{
  dict.Add(key, …);
}
catch (ArgumentException)
{
  throw ...;
}

如果键已经存在IDictication中的密钥(这意味着返回并继续运行程序的当前流程),那么就无法满足该功能的条件条件后一种方法。一个少的查找,几乎没有运行时的"快乐路径",没有机会意外滥用/丢弃"错误代码"返回值。

我假设您需要在发生特定的异常类型或消息。否则,只需松开尝试...捕获块即可。

最新更新