Browse Source

改变元素的索引位置

懒得勤快 3 years ago
parent
commit
394a2ced7e

+ 89 - 5
Masuit.Tools.Abstractions/Extensions/BaseType/IEnumerableExtensions.cs

@@ -1,6 +1,4 @@
-#nullable enable
-
-using System;
+using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Diagnostics;
@@ -11,7 +9,7 @@ using System.Threading.Tasks;
 
 namespace Masuit.Tools
 {
-    public static partial class IEnumerableExtensions
+    public static class IEnumerableExtensions
     {
         /// <summary>
         /// 按字段属性判等取交集
@@ -41,7 +39,7 @@ namespace Masuit.Tools
             return first.Where(f => !second.Any(s => condition(f, s)));
         }
 
-#if NET6_0
+#if NET6_0_OR_GREATER
 #else
 
         /// <summary>
@@ -893,34 +891,120 @@ namespace Masuit.Tools
             return (add, remove, updates);
         }
 
+        /// <summary>
+        /// 将集合声明为非null集合
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="list"></param>
+        /// <returns></returns>
         public static List<T> AsNotNull<T>(this List<T> list)
         {
             return list ?? new List<T>();
         }
 
+        /// <summary>
+        /// 将集合声明为非null集合
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="list"></param>
+        /// <returns></returns>
         public static IEnumerable<T> AsNotNull<T>(this IEnumerable<T> list)
         {
             return list ?? new List<T>();
         }
 
+        /// <summary>
+        /// 满足条件时执行筛选条件
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="source"></param>
+        /// <param name="condition"></param>
+        /// <param name="where"></param>
+        /// <returns></returns>
         public static IEnumerable<T> WhereIf<T>(this IEnumerable<T> source, bool condition, Func<T, bool> where)
         {
             return condition ? source.Where(where) : source;
         }
 
+        /// <summary>
+        /// 满足条件时执行筛选条件
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="source"></param>
+        /// <param name="condition"></param>
+        /// <param name="where"></param>
+        /// <returns></returns>
         public static IEnumerable<T> WhereIf<T>(this IEnumerable<T> source, Func<bool> condition, Func<T, bool> where)
         {
             return condition() ? source.Where(where) : source;
         }
 
+        /// <summary>
+        /// 满足条件时执行筛选条件
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="source"></param>
+        /// <param name="condition"></param>
+        /// <param name="where"></param>
+        /// <returns></returns>
         public static IQueryable<T> WhereIf<T>(this IQueryable<T> source, bool condition, Expression<Func<T, bool>> where)
         {
             return condition ? source.Where(where) : source;
         }
 
+        /// <summary>
+        /// 满足条件时执行筛选条件
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="source"></param>
+        /// <param name="condition"></param>
+        /// <param name="where"></param>
+        /// <returns></returns>
         public static IQueryable<T> WhereIf<T>(this IQueryable<T> source, Func<bool> condition, Expression<Func<T, bool>> where)
         {
             return condition() ? source.Where(where) : source;
         }
+
+        /// <summary>
+        /// 改变元素的索引位置
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="list">集合</param>
+        /// <param name="item">元素</param>
+        /// <param name="index">索引值</param>
+        /// <exception cref="ArgumentNullException"></exception>
+        public static void ChangeIndex<T>(this IList<T> list, T item, int index)
+        {
+            if (item is null)
+            {
+                throw new ArgumentNullException(nameof(item));
+            }
+
+            ChangeIndexInternal(list, item, index);
+        }
+
+        /// <summary>
+        /// 改变元素的索引位置
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="list">集合</param>
+        /// <param name="condition">元素定位条件</param>
+        /// <param name="index">索引值</param>
+        public static void ChangeIndex<T>(IList<T> list, Func<T, bool> condition, int index)
+        {
+            var item = list.FirstOrDefault(condition);
+            if (item != null)
+            {
+                ChangeIndexInternal(list, item, index);
+            }
+        }
+
+        private static void ChangeIndexInternal<T>(IList<T> list, T item, int index)
+        {
+            index = Math.Max(0, index);
+            index = Math.Min(list.Count - 1, index);
+            list.Remove(item);
+            list.Insert(index, item);
+        }
     }
 }

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

@@ -3,7 +3,7 @@
         <TargetFrameworks>netstandard2.0;netstandard2.1;net461;net5;net6</TargetFrameworks>
         <LangVersion>latest</LangVersion>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-        <Version>2.5.4</Version>
+        <Version>2.5.4.1</Version>
         <Authors>懒得勤快</Authors>
         <Description>Masuit.Tools基础公共库,包含一些常用的操作类,大都是静态类,加密解密,反射操作,Excel简单导出,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。</Description>
         <Copyright>懒得勤快,长空X</Copyright>

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

@@ -18,7 +18,7 @@
         <LangVersion>latest</LangVersion>
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-        <Version>1.1.4</Version>
+        <Version>1.1.4.1</Version>
         <FileVersion>1.0</FileVersion>
         <Company>masuit.com</Company>
         <AssemblyVersion>1.0</AssemblyVersion>

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

@@ -19,7 +19,7 @@ github:https://github.com/ldqk/Masuit.Tools
         <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-        <Version>2.5.4</Version>
+        <Version>2.5.4.1</Version>
         <FileVersion>2.4.5.6</FileVersion>
         <Company>masuit.com</Company>
         <AssemblyVersion>2.4.5.6</AssemblyVersion>

+ 1 - 1
Masuit.Tools.Net45/package.nuspec

@@ -2,7 +2,7 @@
 <package>
   <metadata>
     <id>Masuit.Tools.Net45</id>
-    <version>2.5.4</version>
+    <version>2.5.4.1</version>
     <title>Masuit.Tools</title>
     <authors>懒得勤快</authors>
     <owners>masuit.com</owners>

+ 1 - 1
Masuit.Tools/package.nuspec

@@ -2,7 +2,7 @@
 <package>
   <metadata>
     <id>Masuit.Tools.Net</id>
-    <version>2.5.4</version>
+    <version>2.5.4.1</version>
     <title>Masuit.Tools</title>
     <authors>懒得勤快</authors>
     <owners>masuit.com</owners>