将字典添加到另一个

可能重复:
在C#中合并词典
在C#中将值和键从一个字典复制到另一个字典的最快方法是什么?

我有一本有价值的字典,说:

Animals <string, string> 

我现在收到另一个类似的字典,说:

 NewAnimals <string,string> 

我如何将整个NewAnimals字典添加到动物?

 foreach(var newAnimal in NewAnimals) Animals.Add(newAnimal.Key,newAnimal.Value) 

注意:这将引发重复键上的exception。


或者,如果你真的想要去扩展方法的路线(我不会),那么你可以定义一个通用的AddRange扩展方法,可以在任何ICollection<T> ,而不是在Dictionary<TKey,TValue>

 public static void AddRange<T>(this ICollection<T> target, IEnumerable<T> source) { if(target==null) throw new ArgumentNullException(nameof(target)); if(source==null) throw new ArgumentNullException(nameof(source)); foreach(var element in source) target.Add(element); } 

(抛出重复的字典键)

创build一个扩展方法最有可能你会不止一次地使用这个,这可以防止重复的代码。

执行:

  public static void AddRange<T, S>(this Dictionary<T, S> source, Dictionary<T, S> collection) { if (collection == null) { throw new ArgumentNullException("Collection is null"); } foreach (var item in collection) { if(!source.ContainsKey(item.Key)){ source.Add(item.Key, item.Value); } else { // handle duplicate key issue here } } } 

用法:

 Dictionary<string,string> animals = new Dictionary<string,string>(); Dictionary<string,string> newanimals = new Dictionary<string,string>(); animals.AddRange(newanimals); 

最明显的方法是:

 foreach(var kvp in NewAnimals) Animals.Add(kvp.Key, kvp.Value); //use Animals[kvp.Key] = kvp.Value instead if duplicate keys are an issue 

既然Dictionary<TKey, TValue>显式地实现了ICollection<KeyValuePair<TKey, TValue>>.Add方法,你也可以这样做:

 var animalsAsCollection = (ICollection<KeyValuePair<string, string>>) Animals; foreach(var kvp in NewAnimals) animalsAsCollection.Add(kvp); 

很遗憾,类没有像List<T>那样的AddRange方法。

简短的回答是,你必须循环。

有关此主题的更多信息:

在C#中将值和键从一个字典复制到另一个字典的最快方法是什么?

你可以使用foreach循环遍历所有的动物,并将其放入NewAnimals。