一次向C#字典添加许多行

Ran*_*all 2 c# dictionary

如果我实例化一个新的,Dictionary我可以传递许多值:

Dictionary<string, string> data = new Dictionary<string, string>(){
    { "Key1", "Value1" },
    { "Key2", "Value2" },
    { "Key3", "Value3" },
    { "Key4", "Value4" },
    { "Key5", "Value5" },
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我已经有了一个Dictionary,例如在参数中传递它时,则需要调用Add每个键值对:

data.Add("Key1", "Value1");
data.Add("Key2", "Value2");
data.Add("Key3", "Value3");
data.Add("Key4", "Value4");
data.Add("Key5", "Value5");
Run Code Online (Sandbox Code Playgroud)

我想知道是否存在一种“速记”方法来一次将大量值添加到现有字典中-最好是本机地?如果是这样的话,可以接受权威的“否”。


不像我想要的那样干净,但这是我所知道的两个选择。

这个允许一次传递多个值,但是需要创建一个新值Dictionary而不是更新现有值:

Dictionary<string, string> newData = new Dictionary<string, string>(data)
{
    { "Key6", "Value6"},
    { "Key7", "Value7"},
    { "Key8", "Value8"},
};
Run Code Online (Sandbox Code Playgroud)

也可以创建一个扩展方法,但这仍然需要Add每一行:

public static void AddMany<Tkey, TValue>(this Dictionary<Tkey, TValue> dict, Dictionary<Tkey, TValue> toAdd)
{
    foreach(KeyValuePair<Tkey, TValue> row in toAdd)
    {
        dict.Add(row.Key, row.Value);
    }
}
Run Code Online (Sandbox Code Playgroud)

D S*_*ley 5

如果是这样的话,可以接受权威的“否”。

就是这样。

不,没有“ AddRange或”等效项,因为没有一种实用的方法可以一次将多个项目添加到字典中。List一次添加多个项目很有意义,因为它们可以通过一个命令复制到内部数组中。

对于a Dictionary,必须计算每个项目的哈希码以确定该值将存储在哪个“存储桶”中,因此有必要对每个项目进行迭代。因此,一种AddRange方法或其等效方法最好是语法糖。最糟糕的是,需要定义如果列表中的任何项目已经存在会发生什么情况。它会引发异常吗?如果是这样,在重复项之前添加的项目会保留在词典中吗?如果不是,是否会默默地跳过该项目或替换重复项目?

这些是没有直观正确答案的问题,因此尚未预先定义。