小编典典

在字典中添加新项目或更新现有项目的方法

all

在一些遗留代码中,我看到了以下扩展方法,以方便添加新的键值项或更新值(如果键已经存在)。

方法 1(旧代码)。

public static void CreateNewOrUpdateExisting<TKey, TValue>(
    this IDictionary<TKey, TValue> map, TKey key, TValue value)
{            
    if (map.ContainsKey(key))
    {
        map[key] = value;
    }
    else
    {
        map.Add(key, value);
    }
}

不过,我已经检查过map[key]=value 它的工作完全相同。也就是说,这个方法可以用下面的方法2来代替。

方法二。

public static void CreateNewOrUpdateExisting<TKey, TValue>(
    this IDictionary<TKey, TValue> map, TKey key, TValue value)
{
    map[key] = value;
}

现在,我的问题是.. 如果我用 Method-2 替换 Method-1 会有什么问题吗?它会在任何可能的情况下中断吗?

另外,我认为这曾经是 HashTable 和 Dictionary 之间的区别。HashTable 允许更新项目,或使用索引器添加新项目,而
Dictionary 不允许!在 C# > 3.0 版本中是否消除了这种差异?

该方法的目的是如果用户再次发送相同的键值,则不会抛出异常,该方法应该只使用新值更新条目,并且如果已经向该方法发送了新的键值对,则创建一个新条目.


阅读 81

收藏
2022-05-07

共1个答案

小编典典

如果我用 Method-2 替换 Method-1 会有什么问题吗?

不,只需使用map[key] = value. 这两个选项是等效的。

关于Dictionary<>vs. Hashtable:当您启动 Reflector
时,您会看到两个类的索引器设置器都调用this.Insert(key, value, add: false);并且add参数负责在插入重复键时引发异常。所以这两个类的行为是相同的。

2022-05-07