失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C#为什么 Dictionary 没有 AddRange 方法?

C#为什么 Dictionary 没有 AddRange 方法?

时间:2020-05-12 12:18:56

相关推荐

C#为什么 Dictionary 没有 AddRange 方法?

咨询区

Custodio

我一直都有一个疑惑?那就是为啥 Dictionary 不提供 AddRange 方法呢?

回答区

Rafal Zajac

我觉得 Dictionary 之所以没有提供AddRange方法,主要还是考虑当遇到重复key的时候该如何处理?比如下面四种情况:

忽略

A 和 B 重复,忽略 B 。

覆盖

A 和 B 重复,覆盖 A。

合并

A 和 B 重复,将 key 的 value 进行合并。

异常

A 和 B 重复,抛异常给用户处理。

当然这也不是多难得事情,我自己就封装一个 AddRange 的扩展方法,代码如下:

namespaceMyProject.Helper{publicstaticclassCollectionHelper{publicstaticvoidAddRangeOverride<TKey,TValue>(thisIDictionary<TKey,TValue>dic,IDictionary<TKey,TValue>dicToAdd){dicToAdd.ForEach(x=>dic[x.Key]=x.Value);}publicstaticvoidAddRangeNewOnly<TKey,TValue>(thisIDictionary<TKey,TValue>dic,IDictionary<TKey,TValue>dicToAdd){dicToAdd.ForEach(x=>{if(!dic.ContainsKey(x.Key))dic.Add(x.Key,x.Value);});}publicstaticvoidAddRange<TKey,TValue>(thisIDictionary<TKey,TValue>dic,IDictionary<TKey,TValue>dicToAdd){dicToAdd.ForEach(x=>dic.Add(x.Key,x.Value));}publicstaticboolContainsKeys<TKey,TValue>(thisIDictionary<TKey,TValue>dic,IEnumerable<TKey>keys){boolresult=false;keys.ForEachOrBreak((x)=>{result=dic.ContainsKey(x);returnresult;});returnresult;}publicstaticvoidForEach<T>(thisIEnumerable<T>source,Action<T>action){foreach(variteminsource)action(item);}publicstaticvoidForEachOrBreak<T>(thisIEnumerable<T>source,Func<T,bool>func){foreach(variteminsource){boolresult=func(item);if(result)break;}}}}

然后像下面这样使用。

Dictionary<string,string>mainDic=newDictionary<string,string>(){{"Key1","Value1"},{"Key2","Value2.1"},};Dictionary<string,string>additionalDic=newDictionary<string,string>(){{"Key2","Value2.2"},{"Key3","Value3"},};mainDic.AddRangeOverride(additionalDic);//Overridesallexistingkeys//ormainDic.AddRangeNewOnly(additionalDic);//Addsnewkeysonly//ormainDic.AddRange(additionalDic);//Throwsanerrorifkeysalreadyexist//orif(!mainDic.ContainsKeys(additionalDic.Keys))//Checksifkeysdon'texist{mainDic.AddRange(additionalDic);}

点评区

我个人觉得 Dictionary 中应该要提供一个 AddRange 方法,然后通过枚举的方式指定下遇到重复key的情况该执行什么路径,可能现有的扩展方法太多了,没有 AddRange 也可以轻松实现。

-----------------------------------

公众号【Csharp编程大全】,需要进技术群交流的,请添加小编mm1552923!

如果觉得《C#为什么 Dictionary 没有 AddRange 方法?》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。