通用 .NET 万能工具库 Masuit.Tools

目录

前言

项目介绍

项目环境

项目程序包

基础功能包

增值包

为工具库注册配置(可选的,按需配置)

项目示例

一些创意类型

1、纳秒级性能计时器

2、数值转换

3、任意进制转换/中文数字/大写数字

4、敏感信息掩码

5、任何类型支持链式调用

6、产生分布式唯一有序短id(雪花id)

7、随机数

8、权重随机筛选功能

9、树形结构实现

10、简单的Excel导出

项目地址


前言

推荐一个开源、免费全龄段友好的.NET 万能工具库。对于刚刚入门的新手,还是经验丰富的大佬,这个工具库能够帮助我们快速解决开发过程中的基础问题。

整个库的代码量不到 2MB,确保了高效且轻量级的使用体验。

项目介绍

Masuit.Tools 包含了一系列常用的静态操作类,涵盖了加密解密、反射操作、权重随机筛选算法、分布式短ID生成、表达式树、Linq 扩展、文件压缩、多线程下载、硬件信息获取、字符串扩展方法、日期时间操作、中国农历计算、大文件拷贝、图像裁剪、验证码生成、断点续传、集合扩展以及 Excel 导出等多种实用功能。

具体内容,请点击查看思维导图。

项目环境

  • 操作系统:Windows 11 23H2及以上版本
  • 开发工具:VisualStudio2022 v17.8及以上版本
  • SDK:.NET Core 2.1.0及以上所有版本

项目程序包

基础功能包

1、.NET Framework ≥ 4.6.2

PM> Install-Package Masuit.Tools.Net

2、.NET Standard ≥ 2.1 或只想使用一些基本功能

通用项目推荐首选包

PM> Install-Package Masuit.Tools.Abstraction

3、.NET Core ≥ 2.1

.NET Core项目推荐首选包

PM> Install-Package Masuit.Tools.Core

4、.NET Framework 4.5 特供版

请注意:这是.NET Framework 4.5的专用版本,相比4.6.2及.NET Core的版本,阉割了Redis、HTML、文件压缩、ASP.NET扩展、硬件监测、Session扩展等一些功能。

如果你的项目版本高于4.6.2,请务必使用上述版本的包,以享受完整的功能体验!

PM> Install-Package Masuit.Tools.Net45
增值包

1、Masuit.Tools.AspNetCore

AspNetCore项目推荐首选包 ASP.NET Core Web专用包

包含Masuit.Tools.Core的全部功能,并且增加了一些对ASP.NET Core Web功能的额外支持。

2、Masuit.Tools.Excel

Excel导入导出的专用独立包

3、Masuit.Tools.NoSQL.MongoDBClient

mongodb的封装操作类独立包

为工具库注册配置(可选的,按需配置)

工具库需要用到外部配置节,.NET Framework项目配置在web.config/app.config的AppSettings配置节中,.NET Core项目配置在appsettings.json中:

1、EmailDomainWhiteList,邮箱校验需要用到的白名单域名,英文逗号分隔,每个元素支持正则表达式,若未配置,则不启用邮箱校验白名单,示例:

^\\w{1,5}@qq.com,^\\w{1,5}@163.com,^\\w{1,5}@gmail.com,^\\w{1,5}@outlook.com

2、EmailDomainBlockList,邮箱校验需要用到的黑名单域名,英文逗号分隔,每个元素支持正则表达式,且黑名单优先级高于白名单,若未配置,则不启用邮箱校验黑白名单

public Startup(IConfiguration configuration)
{
    configuration.AddToMasuitTools(); 
// 若未调用,则默认自动尝试加载appsettings.json
}

项目示例

一些创意类型

1、DisposableDictionary:可被Disposable的字典类型,用于存放Value是Disposable类型的数据,用法和普通字典一致

2、NullableConcurrentDictionary/NullableDictionary:Key可为null的字典类型,用法和普通字典一致

3、ConcurrentHashSet:并发HashSet,用法和HashSet一致

4、ConcurrentLimitedQueue:定长并发队列,特点是长度是固定的,用法与ConcurrentQueue一致

5、LimitedQueue:定长队列,特点是长度是固定的,用法与Queue一致

6、LargeMemoryStream:超大内存流,最大可支持1TB数据,推荐当数据流大于2GB时使用,用法与MemoryStream一致

7、PooledMemoryStream:池化内存流,可内存复用,用法与MemoryStream一致,性能比MemoryStream好

8、ITree< T>:树形实体接口约束,实现该接口可让类型实现一些树形操作

9、ChineseCalendar:中国农历类型,可以实现天干地支节气等数据的获取

10、Clay/DynamicFactory:粘土动态类型,可实现类似js的弱类型编程

11、RadarChart:雷达图类型,可用于做数据分析或用户行为画像

12、Circle:圆形类型,可实现⚪的相交相切相离的判断

13、Sphere:球体类型,可实现计算球体上两点的弧长计算,相交相切相离的判断

14、MimeMapper:mime类型映射

15、VersionNumber:版本号类型,比System.Version功能更多一点,用法一致

1、纳秒级性能计时器
HiPerfTimer timer = HiPerfTimer.StartNew();
for (int i = 0; i < 100000; i++)
{
  //todo
}
timer.Stop();
Console.WriteLine("执行for循环100000次耗时"+timer.Duration+"s");

double time = HiPerfTimer.Execute(() =>
{
    for (int i = 0; i < 100000; i++)
    {
        //todo
    }
});
Console.WriteLine("执行for循环100000次耗时"+time+"s");
2、数值转换
1.2345678901.Digits8(); // 将小数截断为8位
1.23.ConvertTo<int>(); // 小数转int
1.23.ConvertTo<T>(); // 小数转T基本类型
bool b=1.23.TryConvertTo<T>(out result); // 小数转T基本类型
var num=1.2345.ToDecimal(2); //转decimal并保留两位小数
3、任意进制转换/中文数字/大写数字
var num=123.45.ToChineseMoney(); // 壹佰贰拾叁元肆角伍分
var num=123.45.ToChineseNumber(); // 一百二十三点四五
4、敏感信息掩码
"13123456789".Mask(); // 131****5678
"admin@masuit.com".MaskEmail(); // a****n@masuit.com
// Attribute的方式为json序列化时进行数据脱敏
public class MyClass
{
    [JsonConverter(typeof(MaskEmailConverter))] 
    // 请注意命名空间,使用Newtonsoft.Json请导入Masuit.Tools.Systems命名空间,使用System.Text.Json请导入Masuit.Tools.Systems.Text.Json命名空间
    public string Email { get; set; }
    [JsonConverter(typeof(MaskConverter))] 
    // 请注意命名空间,使用Newtonsoft.Json请导入Masuit.Tools.Systems命名空间,使用System.Text.Json请导入Masuit.Tools.Systems.Text.Json命名空间
    public string PhoneNumber { get; set; }
}
5、任何类型支持链式调用
a.Next(func1).Next(func2).Next(func3);
"123".Next(s=>s.ToInt32()).Next(x=>x*2).Next(x=>Math.Log(x));
6、产生分布式唯一有序短id(雪花id)
// 实例调用
var sf = SnowFlake.GetInstance();
string id = sf.GetUniqueId();
// rcofqodori0w
var sfn = SnowFlakeNew.GetInstance(); 
// 改良版雪花id,对时间回拨不敏感
string id = sfn.GetUniqueId();
// vmbq8q3s3zul

// 静态调用
string id = SnowFlake.NewId;
// rcofqodori0w
string shortId = sf.GetUniqueShortId(8);
// qodw9728
string id = SnowFlakeNew.NewId;
// 改良版雪花id,对时间回拨不敏感

// 全局设置
SnowFlake.SetMachienId(1); 
// 设置机器id
SnowFlake.SetInitialOffset(4219864516915105792);
// 设置起始偏移量
SnowFlake.SetNumberFormater(new NumberFormater("0123456789abcdefghijklmnopqrstuvwxyz._-!"));
// 设置数制格式化器
SnowFlakeNew.SetMachienId(1); 
// 设置机器id
SnowFlakeNew.SetInitialOffset(4219864516915105792);
// 设置起始偏移量
SnowFlakeNew.SetNumberFormater(new NumberFormater("0123456789abcdefghijklmnopqrstuvwxyz._-!"));
// 设置数制格式化器
7、随机数
Random rnd = new Random();
int num = rnd.StrictNext();
//产生真随机数
double gauss = rnd.NextGauss(20,5);
//产生正态高斯分布的随机数
var s = new NumberFormater(62).ToString(new Random().Next(100000, int.MaxValue));
//生成随机字符串
8、权重随机筛选功能
var data=new List<WeightedItem<string>>()
{
     new WeightedItem<string>("A", 1),
     new WeightedItem<string>("B", 3),
     new WeightedItem<string>("C", 4),
     new WeightedItem<string>("D", 4),
};
var item=data.WeightedItem();
//按权重选出1个元素
var list=data.WeightedItems(2);
//按权重选出2个元素
var selector = new WeightedSelector<string>(new List<WeightedItem<string>>()
{
    new WeightedItem<string>("A", 1),
    new WeightedItem<string>("B", 3),
    new WeightedItem<string>("C", 4),
    new WeightedItem<string>("D", 4),
});
var item = selector.Select();
//按权重选出1个元素
var list = selector.SelectMultiple(3);
//按权重选出3个元素
list.WeightedItems(3,e=>e.Price);
// 按价格权重选出3个元素
list.WeightedBy(e=>e.Price);
// 按价格权重选出1个元素
9、树形结构实现

基本接口类: ITreeChildren:带Children属性的接口

ITreeParent:带Parent属性的接口

ITree:继承ITreeParent和ITreeChildren,同时多了Name属性

ITreeEntity:继承ITreeChildren,同时多了Id和ParentId属性

trees.Filter(func); 
// 从树形集合中过滤
trees.Flatten(); 
// 将数据平铺开
tree.AllChildren(); 
// 获取所有的子级
tree.AllParent(); 
// 获取所有的父级
tree.IsRoot(); 
// 是否是根节点
tree.IsLeaf(); 
// 是否是叶子节点
tree.Level(); 
// 所处深度/层级
tree.Path();
// 全路径

var tree=list.ToTree();
//集合元素继承自ITreeEntity<T,TKey>或ITreeEntity<T>的集合转换成树形结构
var tree=list.ToTree(c => c.Id, c => c.Pid);
//集合元素继承自ITreeParent<T>, ITreeChildren<T>的集合转换成树形结构
var tree=list.ToTreeGeneral(c => c.Id, c => c.Pid);
//一般的集合转换成树形结构

10、简单的Excel导出

需要额外依赖包:Masuit.Tools.Excel

var stream=list.Select(item=>new{
    姓名=item.Name,
    年龄=item.Age,
    item.Gender,
    Avatar=Image.FromStream(filestream) 
    //图片列
}).ToDataTable().ToExcel("Sheet1"); 
//自定义列名导出
var stream=list.ToDataTable("Sheet1").ToExcel("文件密码");

一些约定规则:

1、图片列支持Stream、Bitmap、IEnumerable < Stream>、IEnumerable < Bitmap>、IDictionary<string,Stream>、IDictionary<string,MemoryStream>、IDictionary<string,Bitmap>类型;

2、其中,如果是IDictionary类型的图片列,字典的键为图片超链接的完整url;

3、默认字段名作为列名导出;

4、若list是一个具体的强类型,默认会先查找每个字段的Description标记,若有Description标记,则取Description标记作为列名显示

5、ToExcel方法支持DataTable、List < DataTable>、Dictionary<string, DataTable>类型的直接调用

还有很多扩展方法,就不一一列举了,具体可以查看项目地址,按需使用。

项目地址

Github:https://github.com/ldqk/Masuit.Tools

文档地址:https://www.masuit.tools/guid/

在线体验:https://replit.com/@ldqk/MasuitToolsDemo#main.cs

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!

项目基于.NET 4.5构建,语法版本C#6.0,包含日常编程多数的常用封装,可以说是一个万能框架,能够用于任何基于.NET平台的项目当中。 功能主要覆盖: 数据库操作:内存表操作、关系实体映射等; 日期时间常用操作:农历操作、时间戳操作,时分秒转换等; 文件操作:大文件操作、文件压缩与解压、ini配置文件操作; 硬件操作:获取电脑各个硬件的性能指标; Html操作:利用C#对html字符串进行“dom”操作,html的XSS净化、html标签操作; 日志组件:高并发可用的高性能日志记录; 多媒体文件操作:图片的各种处理; 网络操作:获取线程内唯一对象、Session和Cookie的扩展、获取IP地址详细信息、缓存操作; Nosql:仅封装了Redis的常用操作,mongodb的操作类客户端独立分开了; 反射操作:各种对对象的字段属性和方法的快捷方式; 加密安全:对字符串进行的扩展,包含AES、DES、MD5、hash、SHA1、加盐等; 字符串扩展:包含验证码生成、各种与字符串相关的扩展; Win32API:包含于Windows系统接口相关的操作封装; 全局扩展:包含字符串扩展,类型转换,委托、循环操作、异步操作、正则等。 用法 1.检验字符串是否是Email bool isEmail = "1170397736@qq.com".MatchEmail(); 2.获取CPU核心数 int core = SystemInfo.GetCpuCount(); 3.大文件操作 FileStream fs = new FileStream(@"D:\boot.vmdk", FileMode.OpenOrCreate, FileAccess.ReadWrite); { //fs.CopyToFile(@"D:\1.bak");//同步复制大文件 fs.CopyToFileAsync(@"D:\1.bak"); //异步复制大文件 string md5 = fs.GetFileMD5Async().Result; //异步获取文件的MD5 } 4.html的防XSS处理: string html = @"<link href='/Content/font-awesome/css' rel='stylesheet'/> <!--[if IE 7]> <link href='/Content/font-awesome-ie7.min.css' rel='stylesheet'/> <![endif]--> [removed][removed] <form action='/packages' method='get'> 退出 <input name='q' id='searchBoxInput'/> <input id='searchBoxSubmit' type='submit' value='Submit' /> </form> "; string s = html.HtmlSantinizerStandard(); //清理后:退出 5.整理操作系统的内存: Windows.ClearMemorySilent();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值