懒得勤快 пре 2 година
родитељ
комит
ba0c1a1c6c

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

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

+ 25 - 0
Masuit.Tools.Abstractions/Reflection/EnumDescriptionAttribute.cs

@@ -0,0 +1,25 @@
+using System;
+using System.ComponentModel;
+
+[AttributeUsage(AttributeTargets.Field, AllowMultiple = true)]
+public class EnumDescriptionAttribute : DescriptionAttribute
+{
+    public EnumDescriptionAttribute(string description)
+    {
+        DescriptionValue = description ?? throw new ArgumentNullException(nameof(description));
+    }
+
+    public EnumDescriptionAttribute(string description, string display) : this(description)
+    {
+        Display = display ?? throw new ArgumentNullException(nameof(display));
+    }
+
+    public EnumDescriptionAttribute(string description, string display, string language) : this(description, display)
+    {
+        Language = language ?? throw new ArgumentNullException(nameof(language));
+    }
+
+    public string Display { get; set; }
+
+    public string Language { get; set; }
+}

+ 53 - 0
Masuit.Tools.Abstractions/Reflection/ReflectionUtil.cs

@@ -1,12 +1,14 @@
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.Diagnostics.CodeAnalysis;
 using System.IO;
 using System.Linq;
 using System.Linq.Expressions;
 using System.Reflection;
 using System.Resources;
 using System.Text;
+using Masuit.Tools.Systems;
 
 namespace Masuit.Tools.Reflection
 {
@@ -168,6 +170,48 @@ namespace Masuit.Tools.Reflection
             return text;
         }
 
+        /// <summary>
+        /// 获取枚举值的Description信息
+        /// </summary>
+        /// <param name ="value">枚举值</param>
+        /// <returns>如果未找到DescriptionAttribute则返回null或返回类型描述</returns>
+        public static EnumDescriptionAttribute GetEnumDescription(this Enum value)
+        {
+            return GetEnumDescriptions(value).FirstOrDefault();
+        }
+
+        /// <summary>
+        /// 获取枚举值的Description信息
+        /// </summary>
+        /// <param name ="value">枚举值</param>
+        /// <returns>如果未找到DescriptionAttribute则返回null或返回类型描述</returns>
+        public static NullableDictionary<string, (string Description, string Display)> GetTypedEnumDescriptions(this Enum value)
+        {
+            return GetEnumDescriptions(value).ToDictionarySafety(a => a.Language, a => (Description: a.Description, Display: a.Display));
+        }
+
+        /// <summary>
+        /// 获取枚举值的Description信息
+        /// </summary>
+        /// <param name ="value">枚举值</param>
+        /// <returns>如果未找到DescriptionAttribute则返回null或返回类型描述</returns>
+        public static IEnumerable<EnumDescriptionAttribute> GetEnumDescriptions(this Enum value)
+        {
+            if (value == null)
+            {
+                throw new ArgumentNullException(nameof(value));
+            }
+
+            var type = value.GetType();
+            if (!Enum.IsDefined(type, value))
+            {
+                return new List<EnumDescriptionAttribute>();
+            }
+
+            FieldInfo fi = type.GetField(value.ToString());
+            return fi.GetCustomAttributes(typeof(EnumDescriptionAttribute), false).OfType<EnumDescriptionAttribute>();
+        }
+
         /// <summary>
         ///	根据成员信息获取Description信息
         /// </summary>
@@ -206,6 +250,15 @@ namespace Masuit.Tools.Reflection
             return attributes.Length > 0 ? attributes[0] as T : null;
         }
 
+        /// <summary>
+        /// 获取对象的Attributes
+        /// </summary>
+        /// <returns></returns>
+        public static IEnumerable<T> GetAttributes<T>(this ICustomAttributeProvider provider) where T : Attribute
+        {
+            return provider.GetCustomAttributes(typeof(T), true).OfType<T>();
+        }
+
         #region 资源获取
 
         /// <summary>

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

@@ -17,7 +17,7 @@
         <Product>Masuit.Tools.AspNetCore</Product>
         <PackageId>Masuit.Tools.AspNetCore</PackageId>
         <LangVersion>latest</LangVersion>
-        <Version>1.1.9.5</Version>
+        <Version>1.1.9.6</Version>
         <RepositoryType></RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
         <FileVersion>1.1.9</FileVersion>

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

@@ -6,7 +6,7 @@
 官网教程:https://ldqk.org/55
 github:https://github.com/ldqk/Masuit.Tools
         </Description>
-        <Version>2.5.9.5</Version>
+        <Version>2.5.9.6</Version>
         <Copyright>Copyright © 懒得勤快</Copyright>
         <PackageProjectUrl>https://github.com/ldqk/Masuit.Tools</PackageProjectUrl>
         <PackageTags>Masuit.Tools,工具库,Utility,Crypt,Extensions</PackageTags>

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

@@ -181,8 +181,8 @@
     <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\WeightedSelector.cs">
       <Link>RandomSelector\WeightedSelector.cs</Link>
     </Compile>
-    <Compile Include="..\Masuit.Tools.Abstractions\Reflection\ReflectionUtil.cs">
-      <Link>Reflection\ReflectionUtil.cs</Link>
+    <Compile Include="..\Masuit.Tools.Abstractions\Reflection\*.*">
+      <Link>Reflection\%(RecursiveDir)%(FileName)%(Extension)</Link>
     </Compile>
     <Compile Include="..\Masuit.Tools.Abstractions\Security\Crc32.cs">
       <Link>Security\Crc32.cs</Link>

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

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

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

@@ -106,8 +106,8 @@
     <Compile Include="..\Masuit.Tools.Abstractions\Security\*.*">
       <Link>Security\%(RecursiveDir)%(FileName)%(Extension)</Link>
     </Compile>
-    <Compile Include="..\Masuit.Tools.Abstractions\Reflection\ReflectionUtil.cs">
-      <Link>Reflection\ReflectionUtil.cs</Link>
+    <Compile Include="..\Masuit.Tools.Abstractions\Reflection\*.*">
+      <Link>Reflection\%(RecursiveDir)%(FileName)%(Extension)</Link>
     </Compile>
     <Compile Include="..\Masuit.Tools.Abstractions\Strings\NumberFormater.cs">
       <Link>Strings\NumberFormater.cs</Link>

+ 2 - 3
Masuit.Tools/package.nuspec

@@ -2,12 +2,11 @@
 <package>
   <metadata>
     <id>Masuit.Tools.Net</id>
-    <version>2.5.9.5</version>
+    <version>2.5.9.6</version>
     <title>Masuit.Tools</title>
     <authors>懒得勤快</authors>
     <owners>masuit.com</owners>
-    <licenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</licenseUrl>
-    <projectUrl>https://github.com/ldqk/Masuit.Tools</projectUrl>
+      <projectUrl>https://github.com/ldqk/Masuit.Tools</projectUrl>
     <requireLicenseAcceptance>false</requireLicenseAcceptance>
     <description>包含一些常用的操作类,大都是静态类,加密解密,反射操作,Excel简单导出,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。
 官网教程:https://ldqk.org/55

+ 10 - 20
NetCoreTest/Program.cs

@@ -1,29 +1,19 @@
 using Masuit.Tools.AspNetCore.ModelBinder;
 using Masuit.Tools.Files;
 using Masuit.Tools.Media;
+using Masuit.Tools.Reflection;
 
-var stream = File.Open(@"D:\images\QQ½ØÍ¼20190923195408.jpg", FileMode.Open, FileAccess.ReadWrite);
-var watermarker = new ImageWatermarker(stream);
-var ms = watermarker.AddWatermark(File.OpenRead(@"D:\images\QQ½ØÍ¼20190923195408_¿´Í¼Íõ.png"), 0.5f);
-ms.SaveFile(@"Y:\1.jpg");
-Console.WriteLine(1);
+var attributes = MyEnum.A.GetTypedEnumDescriptions();
 Console.ReadKey();
+MyStruct<object>? a = null;
 
-var builder = WebApplication.CreateBuilder(args);
-builder.Services.AddControllers(options => options.ModelBinderProviders.InsertBodyOrDefaultBinding());
-builder.Services.AddEndpointsApiExplorer();
-builder.Services.AddSwaggerGen();
-
-var app = builder.Build();
-
-if (app.Environment.IsDevelopment())
+public enum MyEnum
 {
-    app.UseSwagger();
-    app.UseSwaggerUI();
+    [EnumDescription("A", "a")]
+    A
 }
 
-app.UseAuthorization();
-
-app.MapControllers();
-
-app.Run();
+internal struct MyStruct<T>
+{
+    public T Value { get; set; }
+}