在我一直在处理的代码库中,我发现了这样的用法模式:
If (dict.ContainsKey(key)) // dict is of type IDictionary
{
throw ...;
}
else
{
dict.Add(key, …);
}
这涉及两个搜索过程调用(ContainsKey
[]
/Add
),无论代码所采用的分支哪个分支。我想知道以下模式是否会更有效,一般应该是首选。它仅涉及一个搜索过程调用,但此外还依靠异常系统工作,预计将有一些运行时开销。
try
{
dict.Add(key, …);
}
catch (ArgumentException)
{
throw ...;
}
如果键已经存在IDictication中的密钥(这意味着返回并继续运行程序的当前流程),那么就无法满足该功能的条件条件后一种方法。一个少的查找,几乎没有运行时的"快乐路径",没有机会意外滥用/丢弃"错误代码"返回值。
我假设您需要在发生特定的异常类型或消息。否则,只需松开尝试...捕获块即可。