Yoko.Tool.Core
1.0.6
See the version list below for details.
dotnet add package Yoko.Tool.Core --version 1.0.6
NuGet\Install-Package Yoko.Tool.Core -Version 1.0.6
<PackageReference Include="Yoko.Tool.Core" Version="1.0.6" />
paket add Yoko.Tool.Core --version 1.0.6
#r "nuget: Yoko.Tool.Core, 1.0.6"
// Install Yoko.Tool.Core as a Cake Addin #addin nuget:?package=Yoko.Tool.Core&version=1.0.6 // Install Yoko.Tool.Core as a Cake Tool #tool nuget:?package=Yoko.Tool.Core&version=1.0.6
[TOC]
# Yoko.Tool
懒人必备工具箱
更新日志
1.0.5
【新增】将包含逗号分隔的字符串转换为 long 类型的数组:SplitCsvToLong
【新增】Svg相关操作:
- 判断是否为有效Svg:
IsValidSvg
、 - SVG过滤器:
FilterSvg
【新增】枚举类根据枚举成员获取Display的属性Name:GetDisplay
1.0.4
【优化】雪花id部分项
【新增】获取程序版本号 AppVersion.Current
1.0.3
【新增】查询系统资源信息 (适合Windows和大部分的Linux发行版)
- SystemInfo.GetLocalIPAddress(); // 获取本机当前正在使用的IP地址
- SystemInfo.GetAllMacAddresses(); //获取本机所有MAC地址
- SystemInfo.GetOSVersion(); //获取操作系统版本
- SystemInfo.GetDriveSpaceInfo(); //获取所有硬盘的可用空间和总空间。单位:GB
- SystemInfo.GetMemorySpaceInfo(); //获取内存的可用空间和总空间。单位:GB
1.0.2
ToJson 新增支持自定义格式化参数 JsonSerializerOptions
//默认 JsonSerializerOptions options ??= new() { //整齐打印 //options.WriteIndented = true; //重新编码,解决中文乱码 Encoder = JavaScriptEncoder.Create(UnicodeRanges.All), // 反序列化不区分大小写 PropertyNameCaseInsensitive = true, // 驼峰命名 PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // 对字典的键进行驼峰命名 DictionaryKeyPolicy = JsonNamingPolicy.CamelCase, // 忽略只读属性 //IgnoreReadOnlyProperties = true, // 允许在反序列化的时候原本应为数字的字符串(带引号的数字)转为数字 NumberHandling = JsonNumberHandling.AllowReadingFromString, }; //时间格式化问题 //参考:https://learn.microsoft.com/zh-cn/dotnet/standard/datetime/system-text-json-support#using-datetimeoffsetparse-and-datetimeoffsettostring
1.0.1
- 精确经纬度计算的方法GetDistance
1.0.0
全面支持Net7
移除 Newtonsoft.Json,全面拥抱 System.Text.Json
移除 仅在 Windows 上支持的 System.Drawing.Common
跨平台推荐使用 SkiaSharp
SkiaSharp 是适用于 .NET 平台的跨平台 2D 图形 API,基于 Google 的 Skia 图形库
它提供了一个全面的 2D API,可以跨移动、服务器和桌面模型使用来渲染图像
💎 常用操作扩展
// 值类型转换
.ToInt32()
.ToBool()
.ToLong()
.ToDouble()
.ToDecimal()
.ToFloat()
// 时间操作
.ToDateTime() // 字符串 转 时间
.ToStartTime() // DateTime转换成开始时间00:00:00
.ToEndTime() // DateTime转换成结束时间23:59:59
.ToUnixTime() // DateTime时间转Unix时间戳(默认精确到毫秒13位)
.ToUnixTimeS() // DateTime时间转Unix时间戳(默认精确到秒10位)
.ToLocalTime() // Unix时间戳转DateTime本地时间(yyyy/MM/dd hh:MM:ss)
.DateDiff() // 返回时间差(N小时前,N分钟前···)
.GetDiffTime() // 计算2个时间差(相差多少年月日时分秒)
.GetDaysOfMonth() // 本月有多少天
.GetWeekNameOfDay() // 返回当前日期的星期名称
DateTime.Now.GetDateTime(); //返回标准时间格式(yyyy-MM-dd HH:mm:ss)
DateTime.Now.GetDateTimeF(); //返回标准时间格式(yyyy-MM-dd HH:mm:ss:fffffff)
DateTime.Now.GetTotalSeconds(); // 获取该时间相对于1970-01-01 00:00:00的秒数
DateTime.Now.GetTotalMilliseconds(); // 获取该时间相对于1970-01-01 00:00:00的毫秒数
DateTime.Now.GetTotalMicroseconds(); // 获取该时间相对于1970-01-01 00:00:00的微秒数
//字符串操作
.SplitCsv() // 分割逗号的字符串为List[]、string[]
.SplitCsvToInt() // 分割逗号的字符串为int[]
.ToIntList() // string数组转int数组
.ToStringEscape() // 特殊字符转义,避免XSS跨站脚本攻击
.ToByteArray() // string转换成字节数组
.ToJson() //序列化一个字符串为JSON格式
.ToModel() // 反序列化一个JSON格式字符串为对象
.ToMask() // 字符串敏感信息掩码 (123***789)
.ToMaskEmail() // 邮箱敏感信息掩码 (123****@163.com)
.ToMathRound() //保留两位小数
//值计算
//除法计算 a/b
//type=1 浮点数,保留2位小数(四舍五入):12.34
//type=2 百分比:12.23%
//type=3 带有逗号分隔符,保留小数位数(四舍五入):2,500,000.00
//type=4 货币表示,保留2位小数(四舍五入):¥12.34
DividedBy()
//集合操作
// 指定要拆分成几个集合,集合中子集个数动态分配。如果原集合中子集的个数小于等于要分组数,既source.Count <= size,建议使用source.Chunk(1).ToList()
source.ChunkList(3); //对集合进行分组
//将集合参数ASCII码从小到大排序(默认严格模式)
dict.OrderByASCII();
//DataTable 操作
DataTableHelper<T>.ToList(dt);
DataTableHelper<T>.ToModel(dt);
//URL 操作
UrlSplit(); // 分解URL信息
GetFileName(); // 获取网络文件(图片)的文件名
💎 值判断
// 在范围?
/**
int num = 50;
if (num.IsInRange(100, 1000)) { }
string value = "a";
if (value.IsIn("a", "b", "c")) { }
*/
IsInRange() //int、DateTime值在的范围?
IsIn() //在里面吗?
IsContainsIn() //在里面吗?
IsNullOrEmpty() // 是null或"" ?
IsValuable() // 有值?(与IsNullOrEmpty相反)
IsZero() // 是零?
IsInt() // 是Int?
IsNoInt() // 不是Int?
IsMoney() // 是金钱?
IsDate() // 是时间?
IsDate() // 是邮箱?
IsMobile() // 是手机号?(弱验证)
IsPhoneNumber() // 是手机号?(强验证)
IsTelephone() // 是座机?
IsIDcard() // 是身份证?
IsFax() // 是传真?
IsMatch() // 是适合正则匹配?
IsTrue() // 是true?
IsFalse() // 是false?
💎 随机数
// 按照年月时分秒随机数生成的文件名
YokoRandom.GetFileRndName()
// 生成随机数字
YokoRandom.GetFormatedNumeric(1, 100)
// 生成随机汉字
YokoRandom.GetRandChinese(6)
// 根据指定的样式生成:"?"代表一个字符,"#"代表一个一位数字,"*"代表一个字符串或一个一位数字
YokoRandom.GetRandStringByPattern(@"##??*")
// 获取指定长度的纯字母随机字符串
YokoRandom.GetRandWord(10)
// 获取指定长度的随机字符串
YokoRandom.GetRandomString(10)
💎 加解密/验证
// MD5 加密、加盐
"123456".ToMD5()
"123456".ToMD5("abc123")
// 两次加密、加盐
"123456".ToMD5Double()
"123456".ToMD5Double("abc123")
//AES、DES对称加密解密
AESEncrypt、DesEncrypt
AESDecrypt、DesDecrypt
//HA256函数
SHA256
// 生成一个密码
"123456".CreateHash("是否需要MD5加密 ?")
// 验证密码
"要检查的密码".VerifyPassword("正确密码")
💎 经纬度操作
//根据经纬度计算两点间距离
YokoLngLat.GetDistance(x1,y1,x2,y2)
//求一个包含经纬度集合的距离和
YokoLngLat.GetDistanceSum(dict);
//坐标系互转
YokoLngLat.GPSToAMap() // GPS转高德(WGS84 --> GCJ-02)
YokoLngLat.AMapToGPS() // 高德转GPS(GCJ-02 --> WGS84)
YokoLngLat.AMapToBMap() // 高德转百度(GCJ-02 --> BD-09)
YokoLngLat.BMapToAMap() // 百度转高德(BD-09 --> GCJ-02)
💎 文件/图像操作
"WebImgUrl".ImageToBase64() // 把weburl图片转换为base64格式字符串
"WebImgUrl".GetStream() // 获取Stream流
ReadByte(Stream input) //读[最大支持16M的图片]
🔍 图片文件操作 Yoko.Images.Webp
从静态路径或者网络路径转换、调整大小和压缩 jpeg、png 和 webp 图像
💎 时间段判断
🔍 判断是否在某个时间段内、是否包含某个时间段、两个时间段是否相交、连接两个时间段
var range = new DateTimeRange("2021-9-3", "2021-9-5".ToDateTime());
//连接两个时间段,结果:2021-9-3~2021-9-6
range.Union("2021-9-4".ToDateTime(), "2021-9-6".ToDateTime());
//判断是否在某个时间段内,true
range.In("2021-9-3".ToDateTime(), "2021-9-6".ToDateTime());
//两个时间段是否相交,(true,2021-9-3~2021-9-4)
var (intersected,range2) = range.Intersect("2021-9-4".ToDateTime(), "2021-9-6".ToDateTime());
//判断是否包含某个时间段,true
range.Contains("2021-9-3".ToDateTime(), "2021-9-4".ToDateTime());
💎 邮件发送
// 异步发送邮件 SendEmailAsync
// 同步发送 SendEmail
new Email()
{
SmtpServer = "smtp.qq.com",// SMTP服务器
SmtpPort = 587, // SMTP服务器端口
EnableSsl = true,//使用SSL
Username = "88888888888@qq.com",// 邮箱用户名
Password = "123456789",// 邮箱密码
Tos = "111111111@qq.com,22222222@qq.com", //多个收件人用,隔开
Subject = "测试邮件",//邮件标题
Body = "Hello,WoCao",//邮件内容
}.SendEmailAsync(s =>
{
// 发送成功后的回调
// 异步发送邮件,如果回调方法中参数不为"true"则表示发送失败
Console.WriteLine(s);
});
💎 雪花ID优化版
- 生成的ID更短、速度更快
- 新增预留位
- 解决服务器时间回拨问题
- 兼容传统的经典雪花算法
🔍 调用示例
1、全局初始化,只需全局一次(必须在第2步之前设置)
//初始化 1.0.4+
YokoId.Init(1);
//初始化
YokoId.SetIdGenerator(new IdGeneratorOptions(1));
//WorkerId [1,63]
2、生成ID
var newId = YokoId.NextId();
🔍 参数设置
WorkerId
机器码,最重要参数,无默认值,必须 全局唯一,必须 程序设定,最大值63
如果一台服务器部署多个独立服务,需要为每个服务指定不同的 WorkerId。
WorkerIdBitLength
机器码位长,决定 WorkerId 的最大值,默认值6,取值范围 [1, 19]
💎 枚举操作
// 获取枚举对象Key与显示名称的字典
var dict = typeof(枚举类).GetDictionary();
// 获取枚举值对应的字符串
var enumStr = 0.ToEnumString(typeof(枚举类));
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- System.Management (>= 7.0.0)
-
net7.0
- System.Management (>= 7.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
3.1.7 | 75 | 11/8/2024 | |
3.1.6 | 74 | 11/8/2024 | |
3.1.5 | 80 | 11/4/2024 | |
3.1.1 | 118 | 8/30/2024 | |
3.1.0 | 105 | 8/30/2024 | |
3.0.3-beta.5 | 65 | 7/25/2024 | |
3.0.3-beta.4 | 58 | 7/22/2024 | |
3.0.3-beta.3 | 56 | 7/1/2024 | |
3.0.3-beta.2 | 55 | 6/27/2024 | |
3.0.3-beta.1 | 54 | 6/27/2024 | |
3.0.2 | 116 | 5/13/2024 | |
3.0.1 | 109 | 5/10/2024 | |
1.0.10-rc.4 | 94 | 12/14/2023 | |
1.0.9 | 160 | 11/16/2023 | |
1.0.7 | 132 | 10/11/2023 | |
1.0.6 | 126 | 10/11/2023 | |
1.0.5 | 127 | 9/19/2023 | |
1.0.4 | 184 | 5/22/2023 | |
1.0.3 | 258 | 2/24/2023 | |
1.0.2 | 225 | 2/22/2023 | |
1.0.1 | 244 | 2/14/2023 | |
1.0.0 | 273 | 11/18/2022 |