浏览代码

字典扩展增加GetOrAdd方法

懒得勤快 5 年之前
父节点
当前提交
06d2a933e1
共有 1 个文件被更改,包括 42 次插入4 次删除
  1. 42 4
      Masuit.Tools.Abstractions/Extensions/BaseType/IDictionaryExtensions.cs

+ 42 - 4
Masuit.Tools.Abstractions/Extensions/BaseType/IDictionaryExtensions.cs

@@ -19,7 +19,7 @@ namespace Masuit.Tools
         {
             if ([email protected](key))
             {
-                @this.Add(new KeyValuePair<TKey, TValue>(key, value));
+                @this.Add(key, value);
             }
             else
             {
@@ -75,7 +75,7 @@ namespace Masuit.Tools
         {
             if ([email protected](key))
             {
-                @this.Add(new KeyValuePair<TKey, TValue>(key, addValue));
+                @this.Add(key, addValue);
             }
             else
             {
@@ -99,7 +99,7 @@ namespace Masuit.Tools
         {
             if ([email protected](key))
             {
-                @this.Add(new KeyValuePair<TKey, TValue>(key, addValue));
+                @this.Add(key, addValue);
             }
             else
             {
@@ -157,7 +157,7 @@ namespace Masuit.Tools
         {
             if ([email protected](key))
             {
-                @this.Add(new KeyValuePair<TKey, TValue>(key, addValueFactory(key)));
+                @this.Add(key, addValueFactory(key));
             }
             else
             {
@@ -167,6 +167,44 @@ namespace Masuit.Tools
             return @this[key];
         }
 
+        /// <summary>
+        /// 获取或添加
+        /// </summary>
+        /// <typeparam name="TKey"></typeparam>
+        /// <typeparam name="TValue"></typeparam>
+        /// <param name="this"></param>
+        /// <param name="key"></param>
+        /// <param name="addValueFactory"></param>
+        /// <returns></returns>
+        public static TValue GetOrAdd<TKey, TValue>(this IDictionary<TKey, TValue> @this, TKey key, Func<TValue> addValueFactory)
+        {
+            if ([email protected](key))
+            {
+                @this.Add(key, addValueFactory());
+            }
+
+            return @this[key];
+        }
+
+        /// <summary>
+        /// 获取或添加
+        /// </summary>
+        /// <typeparam name="TKey"></typeparam>
+        /// <typeparam name="TValue"></typeparam>
+        /// <param name="this"></param>
+        /// <param name="key"></param>
+        /// <param name="addValue"></param>
+        /// <returns></returns>
+        public static TValue GetOrAdd<TKey, TValue>(this IDictionary<TKey, TValue> @this, TKey key, TValue addValue)
+        {
+            if ([email protected](key))
+            {
+                @this.Add(key, addValue);
+            }
+
+            return @this[key];
+        }
+
         /// <summary>
         /// 遍历IEnumerable
         /// </summary>