我正在将项目添加到StringDictionary,并且可能会出现重复的键。当然,这将引发异常。
如果重复的机会很小(即极少发生),那么我是否最好使用Try Catch块而不处理它,还是应该在添加每个条目之前始终进行.ContainsKey检查?
我假设如果重复键的可能性很高,那么允许例外将是一个糟糕的决定,因为它们很昂贵。
有什么想法吗?
编辑
我在通用Dictionary上使用了反射器,并针对ContainsKey和TryGetValue找到了以下内容,如下所述。
public bool TryGetValue(TKey key, out TValue value)
{
int index = this.FindEntry(key);
if (index >= 0)
{
value = this.entries[index].value;
return true;
}
value = default(TValue);
return false;
}
和
public bool ContainsKey(TKey key)
{
return (this.FindEntry(key) >= 0);
}
我是否缺少某些东西,还是TryGetValue做的工作比ContainsKey更多?
我感谢您的回答,出于当前的目的,我将进行ContainsKey调用,因为该集合很小,代码更易读。
最佳答案
处理方法取决于发生碰撞时要采取的措施。如果要保留第一个插入的值,则应在插入前使用ContainsKey
进行检查。另一方面,如果您想使用该键的最后一个值,则可以这样做:
// c# sample:
myDictionary[key] = value;
附带说明:如果可能的话,我可能会使用
Dictionary<string, string>
而不是StringDictionary
。如果没有其他选择,您将可以使用更多的Linq扩展方法。关于.net - .net:添加字典项-检查它是否存在或允许异常(exception)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1413304/