可能重复:
Merging dictionaries in C#
What's the fastest way to copy the values and keys from one dictionary into another in C#?
我有一个字典,里面有一些值,比如说:
Animals <string, string>
我现在收到另一个类似的字典,说:
NewAnimals <string,string>
如何将整个NewAnimals字典附加到动物?
答案 0 :(得分:90)
foreach(var newAnimal in NewAnimals)
Animals.Add(newAnimal.Key,newAnimal.Value)
注意:这会在重复键上引发异常。
或者如果您真的想要使用扩展方法路线(我不愿意),那么您可以定义适用于任何AddRange
的常规ICollection<T>
扩展方法,而不仅仅是Dictionary<TKey,TValue>
1}}。
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);
}
(抛出字典的重复键)
答案 1 :(得分:32)
创建扩展方法,很可能您不止一次要使用此功能,这可以防止重复代码。
<强>实施强>
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);
答案 2 :(得分:9)
最明显的方法是:
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);
遗憾的是,该课程没有像AddRange
这样的List<T>
方法。
答案 3 :(得分:3)
简短的回答是,你必须循环。
有关此主题的更多信息:
What's the fastest way to copy the values and keys from one dictionary into another in C#?
答案 4 :(得分:0)
您可以使用foreach遍历所有动物并将其放入NewAnimals。