Browse Source

优化foreach扩展方法

懒得勤快 7 years ago
parent
commit
74d415a8f5

+ 13 - 57
Masuit.Tools.Core/Extensions.cs

@@ -33,7 +33,7 @@ namespace Masuit.Tools
         /// </summary>
         /// </summary>
         /// <param name="objs"></param>
         /// <param name="objs"></param>
         /// <param name="action">回调方法</param>
         /// <param name="action">回调方法</param>
-        public static void ForEach(this IEnumerable<dynamic> objs, Action<object> action)
+        public static void ForEach(this IEnumerable<object> objs, Action<object> action)
         {
         {
             foreach (var o in objs)
             foreach (var o in objs)
             {
             {
@@ -46,7 +46,7 @@ namespace Masuit.Tools
         /// </summary>
         /// </summary>
         /// <param name="objs"></param>
         /// <param name="objs"></param>
         /// <param name="action">回调方法</param>
         /// <param name="action">回调方法</param>
-        public static void ForEach(this IList<dynamic> objs, Action<object> action)
+        public static void ForEach(this IList<object> objs, Action<object> action)
         {
         {
             foreach (var o in objs)
             foreach (var o in objs)
             {
             {
@@ -117,7 +117,7 @@ namespace Masuit.Tools
         /// <param name="action">回调方法</param>
         /// <param name="action">回调方法</param>
         /// <typeparam name="T"></typeparam>
         /// <typeparam name="T"></typeparam>
         /// <returns></returns>
         /// <returns></returns>
-        public static IEnumerable<T> ForEach<T>(this IEnumerable<dynamic> objs, Func<object, T> action)
+        public static IEnumerable<T> ForEach<T>(this IEnumerable<object> objs, Func<object, T> action)
         {
         {
             foreach (var o in objs)
             foreach (var o in objs)
             {
             {
@@ -132,7 +132,7 @@ namespace Masuit.Tools
         /// <param name="action">回调方法</param>
         /// <param name="action">回调方法</param>
         /// <typeparam name="T"></typeparam>
         /// <typeparam name="T"></typeparam>
         /// <returns></returns>
         /// <returns></returns>
-        public static IEnumerable<T> ForEach<T>(this IList<dynamic> objs, Func<object, T> action)
+        public static IEnumerable<T> ForEach<T>(this IList<object> objs, Func<object, T> action)
         {
         {
             foreach (var o in objs)
             foreach (var o in objs)
             {
             {
@@ -199,45 +199,10 @@ namespace Masuit.Tools
         {
         {
             await Task.Run(() =>
             await Task.Run(() =>
             {
             {
-                foreach (var o in objs)
-                {
-                    action(o);
-                }
-            });
-        }
-
-        /// <summary>
-        /// 遍历IEnumerable
-        /// </summary>
-        /// <param name="objs"></param>
-        /// <param name="action">回调方法</param>
-        public static async void ForEachAsync(this IEnumerable<dynamic> objs, Action<object> action)
-        {
-            await Task.Run(() =>
-            {
-                foreach (var o in objs)
-                {
-                    action(o);
-                }
+                Parallel.ForEach(objs, action);
             });
             });
         }
         }
-
-        /// <summary>
-        /// 遍历集合
-        /// </summary>
-        /// <param name="objs"></param>
-        /// <param name="action">回调方法</param>
-        public static async void ForEachAsync(this IList<dynamic> objs, Action<object> action)
-        {
-            await Task.Run(() =>
-            {
-                foreach (var o in objs)
-                {
-                    action(o);
-                }
-            });
-        }
-
+        
         /// <summary>
         /// <summary>
         /// 遍历数组
         /// 遍历数组
         /// </summary>
         /// </summary>
@@ -248,10 +213,7 @@ namespace Masuit.Tools
         {
         {
             await Task.Run(() =>
             await Task.Run(() =>
             {
             {
-                foreach (var o in objs)
-                {
-                    action(o);
-                }
+                Parallel.ForEach(objs, action);
             });
             });
         }
         }
 
 
@@ -265,10 +227,7 @@ namespace Masuit.Tools
         {
         {
             await Task.Run(() =>
             await Task.Run(() =>
             {
             {
-                foreach (var o in objs)
-                {
-                    action(o);
-                }
+                Parallel.ForEach(objs, action);
             });
             });
         }
         }
 
 
@@ -282,10 +241,7 @@ namespace Masuit.Tools
         {
         {
             await Task.Run(() =>
             await Task.Run(() =>
             {
             {
-                foreach (var o in objs)
-                {
-                    action(o);
-                }
+                Parallel.ForEach(objs, action);
             });
             });
         }
         }
 
 
@@ -420,7 +376,7 @@ namespace Masuit.Tools
         /// <param name="source">源</param>
         /// <param name="source">源</param>
         /// <typeparam name="TDestination">目标类型</typeparam>
         /// <typeparam name="TDestination">目标类型</typeparam>
         /// <returns>目标类型集合</returns>
         /// <returns>目标类型集合</returns>
-        public static IEnumerable<TDestination> ToList<TDestination>(this IList<dynamic> source) where TDestination : new()
+        public static IEnumerable<TDestination> ToList<TDestination>(this IList<object> source) where TDestination : new()
         {
         {
             foreach (var o in source)
             foreach (var o in source)
             {
             {
@@ -436,7 +392,7 @@ namespace Masuit.Tools
         /// <param name="source">源</param>
         /// <param name="source">源</param>
         /// <typeparam name="TDestination">目标类型</typeparam>
         /// <typeparam name="TDestination">目标类型</typeparam>
         /// <returns>目标类型集合</returns>
         /// <returns>目标类型集合</returns>
-        public static async Task<IEnumerable<TDestination>> ToListAsync<TDestination>(this IList<dynamic> source) where TDestination : new()
+        public static async Task<IEnumerable<TDestination>> ToListAsync<TDestination>(this IList<object> source) where TDestination : new()
         {
         {
             return await Task.Run(() =>
             return await Task.Run(() =>
             {
             {
@@ -457,7 +413,7 @@ namespace Masuit.Tools
         /// <param name="source">源</param>
         /// <param name="source">源</param>
         /// <typeparam name="TDestination">目标类型</typeparam>
         /// <typeparam name="TDestination">目标类型</typeparam>
         /// <returns>目标类型集合</returns>
         /// <returns>目标类型集合</returns>
-        public static IEnumerable<TDestination> ToList<TDestination>(this IEnumerable<dynamic> source) where TDestination : new()
+        public static IEnumerable<TDestination> ToList<TDestination>(this IEnumerable<object> source) where TDestination : new()
         {
         {
             foreach (var o in source)
             foreach (var o in source)
             {
             {
@@ -473,7 +429,7 @@ namespace Masuit.Tools
         /// <param name="source">源</param>
         /// <param name="source">源</param>
         /// <typeparam name="TDestination">目标类型</typeparam>
         /// <typeparam name="TDestination">目标类型</typeparam>
         /// <returns>目标类型集合</returns>
         /// <returns>目标类型集合</returns>
-        public static async Task<IEnumerable<TDestination>> ToListAsync<TDestination>(this IEnumerable<dynamic> source) where TDestination : new()
+        public static async Task<IEnumerable<TDestination>> ToListAsync<TDestination>(this IEnumerable<object> source) where TDestination : new()
         {
         {
             return await Task.Run(() =>
             return await Task.Run(() =>
             {
             {

+ 1 - 1
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -2,7 +2,7 @@
 
 
   <PropertyGroup>
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
     <TargetFramework>netstandard2.0</TargetFramework>
-    <Version>1.8.9</Version>
+    <Version>1.8.9.1</Version>
     <Authors>懒得勤快</Authors>
     <Authors>懒得勤快</Authors>
     <Company>masuit.com</Company>
     <Company>masuit.com</Company>
     <Description>包含一些常用的操作类,大都是静态类,加密解密,反射操作,硬件信息,字符串扩展方法,日期时间扩展操作,大文件拷贝,图像裁剪,html处理,验证码、NoSql等常用封装。
     <Description>包含一些常用的操作类,大都是静态类,加密解密,反射操作,硬件信息,字符串扩展方法,日期时间扩展操作,大文件拷贝,图像裁剪,html处理,验证码、NoSql等常用封装。

+ 5 - 49
Masuit.Tools/Extensions.cs

@@ -199,45 +199,10 @@ namespace Masuit.Tools
         {
         {
             await Task.Run(() =>
             await Task.Run(() =>
             {
             {
-                foreach (var o in objs)
-                {
-                    action(o);
-                }
-            });
-        }
-
-        /// <summary>
-        /// 遍历IEnumerable
-        /// </summary>
-        /// <param name="objs"></param>
-        /// <param name="action">回调方法</param>
-        public static async void ForEachAsync(this IEnumerable<dynamic> objs, Action<object> action)
-        {
-            await Task.Run(() =>
-            {
-                foreach (var o in objs)
-                {
-                    action(o);
-                }
+                Parallel.ForEach(objs, action);
             });
             });
         }
         }
-
-        /// <summary>
-        /// 遍历集合
-        /// </summary>
-        /// <param name="objs"></param>
-        /// <param name="action">回调方法</param>
-        public static async void ForEachAsync(this IList<dynamic> objs, Action<object> action)
-        {
-            await Task.Run(() =>
-            {
-                foreach (var o in objs)
-                {
-                    action(o);
-                }
-            });
-        }
-
+        
         /// <summary>
         /// <summary>
         /// 遍历数组
         /// 遍历数组
         /// </summary>
         /// </summary>
@@ -248,10 +213,7 @@ namespace Masuit.Tools
         {
         {
             await Task.Run(() =>
             await Task.Run(() =>
             {
             {
-                foreach (var o in objs)
-                {
-                    action(o);
-                }
+                Parallel.ForEach(objs, action);
             });
             });
         }
         }
 
 
@@ -265,10 +227,7 @@ namespace Masuit.Tools
         {
         {
             await Task.Run(() =>
             await Task.Run(() =>
             {
             {
-                foreach (var o in objs)
-                {
-                    action(o);
-                }
+                Parallel.ForEach(objs, action);
             });
             });
         }
         }
 
 
@@ -282,10 +241,7 @@ namespace Masuit.Tools
         {
         {
             await Task.Run(() =>
             await Task.Run(() =>
             {
             {
-                foreach (var o in objs)
-                {
-                    action(o);
-                }
+                Parallel.ForEach(objs, action);
             });
             });
         }
         }
 
 

+ 2 - 2
Masuit.Tools/Masuit.Tools.csproj

@@ -52,8 +52,8 @@
     <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
     <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
       <HintPath>..\..\MyBlogs\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
       <HintPath>..\..\MyBlogs\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
     </Reference>
     </Reference>
-    <Reference Include="StackExchange.Redis, Version=1.2.6.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\StackExchange.Redis.1.2.6\lib\net45\StackExchange.Redis.dll</HintPath>
+    <Reference Include="StackExchange.Redis, Version=1.2.4.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\StackExchange.Redis.1.2.4\lib\net45\StackExchange.Redis.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System" />
     <Reference Include="System" />
     <Reference Include="System.ComponentModel.DataAnnotations" />
     <Reference Include="System.ComponentModel.DataAnnotations" />

+ 2 - 2
Masuit.Tools/Properties/AssemblyInfo.cs

@@ -36,7 +36,7 @@ using System.Runtime.InteropServices;
 // 方法是按如下所示使用“*”: :
 // 方法是按如下所示使用“*”: :
 // [assembly: AssemblyVersion("1.0.*")]
 // [assembly: AssemblyVersion("1.0.*")]
 
 
-[assembly: AssemblyVersion("1.8.6")]
-[assembly: AssemblyFileVersion("1.8.6")]
+[assembly: AssemblyVersion("1.8.7")]
+[assembly: AssemblyFileVersion("1.8.7")]
 [assembly: NeutralResourcesLanguage("zh-CN")]
 [assembly: NeutralResourcesLanguage("zh-CN")]
 
 

+ 1 - 1
Masuit.Tools/packages.config

@@ -4,5 +4,5 @@
   <package id="HtmlSanitizer" version="4.0.183" targetFramework="net45" />
   <package id="HtmlSanitizer" version="4.0.183" targetFramework="net45" />
   <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net45" />
   <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net45" />
   <package id="SharpZipLib" version="0.86.0" targetFramework="net45" />
   <package id="SharpZipLib" version="0.86.0" targetFramework="net45" />
-  <package id="StackExchange.Redis" version="1.2.6" targetFramework="net45" />
+  <package id="StackExchange.Redis" version="1.2.4" targetFramework="net45" />
 </packages>
 </packages>

+ 2 - 2
Test/Test.csproj

@@ -35,8 +35,8 @@
     <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
     <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
       <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
       <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
     </Reference>
     </Reference>
-    <Reference Include="StackExchange.Redis, Version=1.2.6.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\StackExchange.Redis.1.2.6\lib\net45\StackExchange.Redis.dll</HintPath>
+    <Reference Include="StackExchange.Redis, Version=1.2.4.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\StackExchange.Redis.1.2.4\lib\net45\StackExchange.Redis.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System" />
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Core" />

+ 1 - 1
Test/packages.config

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
 <packages>
   <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net45" />
   <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net45" />
-  <package id="StackExchange.Redis" version="1.2.6" targetFramework="net45" />
+  <package id="StackExchange.Redis" version="1.2.4" targetFramework="net45" />
 </packages>
 </packages>