我正在将项目添加到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/

10-09 19:51