效率提升利器,一个全龄段友好的DotNET万能工具库
1104 字
6 分钟
效率提升利器,一个全龄段友好的DotNET万能工具库
项目介绍
Masuit.Tools(码数吐司库)是一个全龄段友好的C#/.NET万能工具库,不管你是菜鸟新手还是骨灰级玩家都能轻松上手。
包含功能
这个库包含一些常用的操作类,大都是静态类,加密解密,反射操作,树结构,文件探测,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展、Excel导出等常用封装。
诸多功能集一身,代码量不到2MB!
建议开发环境
- 操作系统:Windows 11 23H2及以上版本.
- 开发工具:VisualStudio2022 v17.8及以上版本.
- SDK:.Net Core 2.1.0及以上所有版本.
字符串检查
检验字符串是否是Email、手机号、URL、IP地址、身份证号等
var (isMatch, match) = "[email protected]".MatchEmail(); // 可在appsetting.json中添加EmailDomainWhiteList和EmailDomainBlockList配置邮箱域名黑白名单,逗号分隔,如"EmailDomainBlockList": "^\\w{1,5}@qq.com,^\\w{1,5}@163.com,^\\w{1,5}@gmail.com,^\\w{1,5}@outlook.com",bool isInetAddress = "114.114.114.114".MatchInetAddress(); // 匹配IP地址bool isUrl = "http://masuit.org/20/history".MatchUrl(); // 匹配urlbool isPhoneNumber = "15205201520".MatchPhoneNumber(); // 匹配手机号bool isLandline = "01088888888".MatchLandline(); // 匹配座机号bool isIdentifyCard = "312000199502230660".MatchIdentifyCard();// 校验中国大陆身份证号bool isCNPatentNumber = "200410018477.9".MatchCNPatentNumber(); // 校验中国专利申请号或专利号,是否带校验位,校验位前是否带“.”,都可以校验,待校验的号码前不要带CN、ZL字样的前缀bool isUSCC = "200410018477.9".MatchUSCC(); // 校验企业统一社会信用代码硬件监测
硬件监测(需要管理员权限,仅支持Windows,部分函数仅支持物理机模式)!
float load = SystemInfo.CpuLoad;// 获取CPU占用率long physicalMemory = SystemInfo.PhysicalMemory;// 获取物理内存总数long memoryAvailable = SystemInfo.MemoryAvailable;// 获取物理内存可用率double freePhysicalMemory = SystemInfo.GetFreePhysicalMemory();// 获取可用物理内存double temperature = SystemInfo.GetCPUTemperature();// 获取CPU温度int cpuCount = SystemInfo.GetCpuCount();// 获取CPU核心数var ipAddress = SystemInfo.GetLocalIPs();// 获取本机所有IP地址string localUsedIp = SystemInfo.GetLocalUsedIP();// 获取本机当前正在使用的IP地址IList<string> macAddress = SystemInfo.GetMacAddress();// 获取本机所有网卡mac地址string osVersion = Windows.GetOsVersion();// 获取操作系统版本RamInfo ramInfo = SystemInfo.GetRamInfo();// 获取内存信息var cpuSN=SystemInfo.GetCpuInfo()[0].SerialNumber; // CPU序列号var driveSN=SystemInfo.GetDiskInfo()[0].SerialNumber; // 硬盘序列号
// 快速方法var cpuInfos = CpuInfo.Locals; // 快速获取CPU的信息var ramInfo = RamInfo.Local; // 快速获取内存的信息var diskInfos = DiskInfo.Locals; // 快速获取硬盘的信息var biosInfo = BiosInfo.Local; // 快速获取主板的信息LinqExtension
using System;using System.Collections.Generic;using System.Linq.Expressions;
namespace Masuit.Tools.Linq;
/// <summary>/// LINQ扩展方法/// </summary>public static class LinqExtension{ /// <summary> /// 与连接 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="left">左条件</param> /// <param name="right">右条件</param> /// <returns>新表达式</returns> public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> left, Expression<Func<T, bool>> right) { return CombineLambdas(left, right, ExpressionType.AndAlso); }
/// <summary> /// 与连接 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="left">左条件</param> /// <param name="condition">符合什么条件</param> /// <param name="right">右条件</param> /// <returns>新表达式</returns> public static Expression<Func<T, bool>> AndIf<T>(this Expression<Func<T, bool>> left, bool condition, Expression<Func<T, bool>> right) { return condition ? CombineLambdas(left, right, ExpressionType.AndAlso) : left; }
/// <summary> /// 与连接 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="left">左条件</param> /// <param name="condition">符合什么条件</param> /// <param name="right">右条件</param> /// <returns>新表达式</returns> public static Expression<Func<T, bool>> AndIf<T>(this Expression<Func<T, bool>> left, Func<bool> condition, Expression<Func<T, bool>> right) { return condition() ? CombineLambdas(left, right, ExpressionType.AndAlso) : left; }
/// <summary> /// 或连接 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="left">左条件</param> /// <param name="right">右条件</param> /// <returns>新表达式</returns> public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> left, Expression<Func<T, bool>> right) { return CombineLambdas(left, right, ExpressionType.OrElse); }
/// <summary> /// 或连接 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="left">左条件</param> /// <param name="condition">符合什么条件</param> /// <param name="right">右条件</param> /// <returns>新表达式</returns> public static Expression<Func<T, bool>> OrIf<T>(this Expression<Func<T, bool>> left, bool condition, Expression<Func<T, bool>> right) { return condition ? CombineLambdas(left, right, ExpressionType.OrElse) : left; }
/// <summary> /// 或连接 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="left">左条件</param> /// <param name="condition">符合什么条件</param> /// <param name="right">右条件</param> /// <returns>新表达式</returns> public static Expression<Func<T, bool>> OrIf<T>(this Expression<Func<T, bool>> left, Func<bool> condition, Expression<Func<T, bool>> right) { return condition() ? CombineLambdas(left, right, ExpressionType.OrElse) : left; }
private static Expression<Func<T, bool>> CombineLambdas<T>(this Expression<Func<T, bool>> left, Expression<Func<T, bool>> right, ExpressionType expressionType) { var visitor = new SubstituteParameterVisitor { Sub = { [right.Parameters[0]] = left.Parameters[0] } };
Expression body = Expression.MakeBinary(expressionType, left.Body, visitor.Visit(right.Body)); return Expression.Lambda<Func<T, bool>>(body, left.Parameters[0]); }}
internal class SubstituteParameterVisitor : ExpressionVisitor{ public Dictionary<Expression, Expression> Sub = new();
protected override Expression VisitParameter(ParameterExpression node) { return Sub.TryGetValue(node, out var newValue) ? newValue : node; }}开源地址
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
效率提升利器,一个全龄段友好的DotNET万能工具库
https://blog.huhaha.vip/posts/309e6522/相关文章智能推荐
1
dotnet9中的认证鉴权学习
DotNetdotnet9中的认证鉴权学习
2
记录Dotnet6中使用Redis共享Session的实现
DotNet如何在Dotnet 6项目中使用Redis实现Session的共享。在多服务器环境下,由于Session默认存储在内存中导致的会话信息丢失问题。通过安装必要的NuGet包、修改startup.cs或Program.cs文件以配置Redis作为Session存储的步骤,可以有效解决Session共享问题
3
.NET 开发者必备:全面整理常用 dotnet 命令
DotNet作为 .NET 开发者,你是否经常需要查找命令行指令?本文为你整理了开发过程中最常用的 `dotnet` 命令,涵盖项目创建、构建、测试、部署等多个方面,助你提升开发效率!
4
集群环境下,你不得不注意的ASP.NET Core Data Protection 机制
DotNet在集群环境中使用ASP.NET Core时遇到的数据保护问题。在单个容器中正常运行的Web应用,在扩展到多个容器后出现的会话信息丢失问题,并分析了其根本原因在于每个容器生成的私钥不同。提供了使用Redis作为存储介质来实现私钥共享的具体步骤,包括添加必要的NuGet包和配置数据保护服务及分布式Session的方法
5
Visual Studio 修改NuGet 包缓存路径
DotNetVisual Studio 下载的NuGet包默认会缓存到 C:\Users{Windows用户名}.nuget\packages 下,时间一长就会导致 C盘空间严重不足。 那么怎样去设置,让包缓存文件保存到其他盘呢?
随机文章随机推荐
小王的博客














