mgzhenhong.ASW2.Utility
2.1.3
dotnet add package mgzhenhong.ASW2.Utility --version 2.1.3
NuGet\Install-Package mgzhenhong.ASW2.Utility -Version 2.1.3
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="mgzhenhong.ASW2.Utility" Version="2.1.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="mgzhenhong.ASW2.Utility" Version="2.1.3" />
<PackageReference Include="mgzhenhong.ASW2.Utility" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add mgzhenhong.ASW2.Utility --version 2.1.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: mgzhenhong.ASW2.Utility, 2.1.3"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package mgzhenhong.ASW2.Utility@2.1.3
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=mgzhenhong.ASW2.Utility&version=2.1.3
#tool nuget:?package=mgzhenhong.ASW2.Utility&version=2.1.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
ASW.Utility
📖 项目简介
ASW.Utility 是 ASW 框架的核心工具库,提供了丰富的扩展方法、辅助类和实用工具。该库涵盖了日常开发中常用的功能,包括类型扩展、加密解密、日志处理、数据转换、时间处理、数学计算、正则表达式、ID生成等,旨在提高开发效率和代码质量。
✨ 核心特性
🔧 丰富的扩展方法
- 基础类型扩展: string、DateTime、bool、int 等基础类型的增强功能
- 集合扩展: IEnumerable、IList、IDictionary 等集合操作扩展
- 类型扩展: Type 反射操作和 Object 通用操作扩展
- 网络扩展: IPv4 地址处理和验证扩展
🛠️ 实用工具类
- 加密解密: MD5、SHA、AES、RSA 等多种加密算法
- 数学计算: 数值处理、范围计算、精度控制等
- 正则表达式: 常用正则模式和验证方法
- 颜色处理: 颜色代码转换和处理工具
📝 日志系统
- 多种日志提供器: Console、File、Custom 日志输出
- 灵活配置: 支持日志级别、格式化、文件轮转等
- 性能优化: 异步日志写入和缓冲机制
- 集成简单: 与 Microsoft.Extensions.Logging 完美集成
⚡ 高级功能
- ActionResult/ExecuteResult: 统一的操作结果封装
- NamedArgs: 命名参数传递工具
- 雪花ID: 分布式唯一ID生成
- 定时器组: 高效的定时任务管理
- 观察者模式: ObservableObject 和 ObservableDictionary
🏗️ 模块架构
组件结构
┌─────────────────────────────────────────────────────────────┐
│ ASW.Utility │
├─────────────────────────────────────────────────────────────┤
│ Extensions/ │ Helpers/ │ Core/ │
│ ├─ StringExtensions │ ├─ CryptHelper │ ├─ ActionResult │
│ ├─ DateTimeExtensions │ ├─ MathHelper │ ├─ ExecuteResult │
│ ├─ ObjectExtensions │ ├─ RegexHelper │ ├─ NamedArgs │
│ ├─ CollectionExt... │ ├─ LoggerHelper │ ├─ TimerGroup │
│ └─ TypeExtensions │ └─ EnumHelper │ └─ SnowId │
├─────────────────────────────────────────────────────────────┤
│ Logger System │
│ ConsoleLogger │ FileLogger │ CustomLogger │ Providers │
└─────────────────────────────────────────────────────────────┘
🚀 快速开始
安装
# Package Manager
Install-Package mgzhenhong.ASW.Utility
# .NET CLI
dotnet add package mgzhenhong.ASW.Utility
# PackageReference
<PackageReference Include="mgzhenhong.ASW.Utility" Version="x.x.x" />
基本使用
using ASW.Utility;
using ASW.Utility.Extensions;
using ASW.Utility.Helpers;
// 字符串扩展
string text = " Hello World ";
bool isEmpty = text.IsEmptyOrWhiteSpace(); // 检查是否为空或空白
string repeated = text.Repeat(3); // 重复字符串
string formatted = "Hello {0}".AsFormat("World"); // 格式化字符串
string pascalCase = "hello_world".ToPascalCase(); // "HelloWorld"
// 日期时间扩展
DateTime now = DateTime.Now;
string formatted = now.ToyyyyMMddHHmmss(); // "20231215143025"
bool isWeekend = now.IsWeekend(); // 是否周末
// 集合扩展
var list = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = list.Where(x => x % 2 == 0); // 过滤偶数
string joined = string.Join(", ", list); // "1, 2, 3, 4, 5"
// 加密解密
string password = "mypassword";
string md5Hash = CryptHelper.Md5(password); // MD5哈希
string encrypted = CryptHelper.Aes.EncryptWithECB(password, key); // AES加密
📚 详细功能指南
字符串扩展
using ASW.Utility.Extensions;
// 实际存在的字符串扩展方法
string text = "Hello World";
// 字符串判断
bool isEmpty = text.IsEmptyOrWhiteSpace(); // 检查是否为空或空白
bool contains = text.Contains("world", true); // 忽略大小写包含
// 字符串操作
string repeated = text.Repeat(3); // 重复字符串
string filled = text.Fill('*'); // 填充字符
string formatted = "Hello {0}".AsFormat("World"); // 格式化字符串
string combined = "C:\\".PathCombine("folder\\file.txt"); // 路径拼接
// 字符串替换
string replaced = text.ReplaceStart("Hello", "Hi"); // 前缀替换
string appended = text.Append(" !"); // 追加内容
string prepended = text.Prepend("Say: "); // 前置内容
// 大小写转换
string pascalCase = "hello_world".ToPascalCase(); // "HelloWorld"
string camelCase = "HelloWorld".ToCamelCase(); // "helloWorld"
string snakeCase = "HelloWorld".ToSnakeCase(); // "hello_world"
// 正则表达式操作
string regexReplaced = text.RegexReplace("\\w+", "***"); // 正则替换
string firstMatch = text.RegexMatch("\\w+"); // 第一个匹配
string[] allMatches = text.RegexMatchAll("\\w+"); // 所有匹配
bool isMatch = text.RegexIsMatch("\\w+"); // 是否匹配
日期时间扩展
using ASW.Utility.Extensions;
// 实际存在的日期时间扩展方法
DateTime date = DateTime.Now;
// 格式化(基于实际存在的方法)
string formatted = date.ToyyyyMMddHHmmss(); // "20231215143025"
// 时间判断
bool isWeekend = date.IsWeekend(); // 是否周末
bool isToday = date.IsToday(); // 是否今天
// 注意:请参考实际的 DateTimeExtensions.cs 文件了解所有可用的扩展方法
对象扩展
using ASW.Utility.Extensions;
// 实际存在的对象扩展方法
var obj = new { Name = "Test", Age = 25 };
// 类型转换
int age = obj.ChangeType<int>(); // 类型转换
bool success = obj.TryChangeType<string>(out string result); // 安全类型转换
// 对象克隆
var copy = obj.JsonClone<object>(); // 使用JSON序列化克隆
// 注意:请参考实际的 ObjectExtensions.cs 文件了解所有可用的扩展方法
加密工具
using ASW.Utility.Helpers;
// 哈希计算
string text = "password123";
string md5 = CryptHelper.Md5(text); // MD5哈希
// 对称加密 - AES
string key = "mySecretKey123456"; // 16字节密钥
string plainText = "sensitive data";
string encrypted = CryptHelper.Aes.EncryptWithECB(plainText, Convert.ToBase64String(Encoding.UTF8.GetBytes(key)));
string decrypted = CryptHelper.Aes.DecryptWithECB(encrypted, Convert.ToBase64String(Encoding.UTF8.GetBytes(key)));
// 对称加密 - TripleDES
string encrypted3des = CryptHelper.TripleDES.EncryptWithECB(plainText, Convert.ToBase64String(Encoding.UTF8.GetBytes(key)));
string decrypted3des = CryptHelper.TripleDES.DecryptWithECB(encrypted3des, Convert.ToBase64String(Encoding.UTF8.GetBytes(key)));
// 简单异或加密
string password = "userPassword";
string xorKey = "myKey";
string xorEncrypted = CryptHelper.StringXor(password, xorKey);
string xorDecrypted = CryptHelper.StringXor(xorEncrypted, xorKey); // 再次运行就是解密
### 日志系统
```csharp
using ASW.Utility.Helpers;
using ASW.Utility.Logger;
using Microsoft.Extensions.Logging;
// 快速创建日志器
var logger = LoggerHelper.CreateLogger("MyApp");
logger.LogInformation("应用程序启动");
logger.LogWarning("这是一个警告");
logger.LogError("发生错误: {ErrorMessage}", "数据库连接失败");
// 配置日志工厂
var loggerFactory = LoggerFactory.Create(builder => {
// 控制台日志
builder.AddProvider(new ConsoleLoggerProvider());
// 文件日志
var fileSettings = new FileLoggerSettings {
LogDirectory = "./logs",
FileNameTemplate = "app-{date}.log",
MaxFileSizeBytes = 10 * 1024 * 1024, // 10MB
MaxFileCount = 30, // 保留30个文件
LogLevel = LogLevel.Information
};
builder.AddProvider(new FileLoggerProvider(fileSettings));
// 自定义日志
builder.AddProvider(new CustomLoggerProvider((logLevel, message) => {
// 自定义日志处理逻辑
Console.WriteLine($"[{logLevel}] {message}");
}));
});
var logger = loggerFactory.CreateLogger("MyService");
操作结果封装
using ASW.Utility;
// ActionResult 使用
public ActionResult ProcessOrder(int orderId) {
try {
if (orderId <= 0) {
return ActionResult.Fail("订单ID无效");
}
// 处理订单逻辑
var order = GetOrder(orderId);
if (order == null) {
return ActionResult.Fail("订单不存在");
}
ProcessOrderInternal(order);
return ActionResult.Success("订单处理成功", order);
} catch (Exception ex) {
return ActionResult.Fail($"处理失败: {ex.Message}");
}
}
// 使用结果
var result = ProcessOrder(12345);
if (result.State) {
Console.WriteLine($"成功: {result.Message}");
var order = result.GetData<Order>();
} else {
Console.WriteLine($"失败: {result.Message}");
}
// 链式调用
var finalResult = ProcessOrder(12345)
.WhenSuccessRun(() => SendNotification())
.WhenSuccessRun(() => UpdateInventory())
.WhenFailCall(r => LogError(r.Message));
命名参数
using ASW.Utility;
// NamedArgs 使用
var args = new NamedArgs();
args.Add("userId", 12345);
args.Add("userName", "张三");
args.Add("loginTime", DateTime.Now);
args.Add("metadata", new { ip = "192.168.1.100", browser = "Chrome" });
// 获取参数
int userId = args.GetValue<int>("userId"); // 12345
string userName = args.GetValue<string>("userName"); // "张三"
DateTime loginTime = args.GetValue<DateTime>("loginTime"); // 登录时间
string defaultValue = args.GetValue<string>("notExists", "默认值"); // "默认值"
// 字典转换
var dict = new Dictionary<string, object> { ["key"] = "value" };
var argsFromDict = NamedArgs.FromDictionary(dict);
// 对象转换
var obj = new { Name = "Test", Age = 25 };
var argsFromObj = NamedArgs.FromObject(obj);
// 命令行参数转换
string[] cmdArgs = { "name=test", "age=25", "debug" };
var argsFromCmd = NamedArgs.FromEntryArgs(cmdArgs);
### ID生成器
```csharp
using ASW.Utility;
using ASW.Utility.Helpers;
// 雪花ID生成
long snowId = SnowIdHelper.GenerateId(); // 生成唯一雪花ID
string snowIdStr = SnowIdHelper.GenerateIdString(); // 字符串格式
// 简单唯一ID
string uid = Uid.Create(); // 生成UUID
string shortId = Uid.Create8(); // 8位短ID
string longId = Uid.Create32(); // 32位长ID
// 自定义ID生成器
var generator = new SnowIdGenerator(workerId: 1, datacenterId: 1);
long customId = generator.GenerateId();
定时器组
using ASW.Utility;
// 创建定时器组
var timerGroup = new TimerGroup("MyTimers");
// 延迟执行
timerGroup.Delay(TimeSpan.FromSeconds(5), () => {
Console.WriteLine("5秒后执行");
});
// 周期性执行
timerGroup.Interval(TimeSpan.FromMinutes(1), () => {
Console.WriteLine("每分钟执行一次");
});
// 指定时间执行
timerGroup.At(DateTime.Today.AddHours(9), () => {
Console.WriteLine("每天9点执行");
});
// 条件性定时器
timerGroup.While(
condition: () => IsServiceRunning(),
interval: TimeSpan.FromSeconds(30),
action: () => HeartbeatCheck()
);
// 清理所有定时器
timerGroup.Clear();
🔧 高级功能
🔧 实用工具
数学计算工具
using ASW.Utility.Helpers;
// 请参考 MathHelper.cs 了解可用的数学计算方法
正则表达式工具
using ASW.Utility.Helpers;
// 请参考 RegexHelper.cs 了解可用的正则表达式方法
枚举工具
using ASW.Utility.Helpers;
// 请参考 EnumHelper.cs 了解可用的枚举操作方法
📊 性能特点
扩展方法性能
字符串操作:
- 安全操作 (IsNullOrEmpty等): ~10ns
- 格式化操作: ~100ns - 1μs
- 编码解码: ~1μs - 10μs
集合操作:
- 安全操作: ~10ns
- 条件过滤: O(n) 时间复杂度
- 分块操作: ~1μs/1000项
加密操作:
- MD5: ~10μs/KB
- SHA256: ~15μs/KB
- AES加密: ~20μs/KB
内存使用
ActionResult: ~200 bytes
NamedArgs: ~100 bytes + 参数数据
TimerGroup: ~1KB + 定时器数量 * 200 bytes
SnowId Generator: ~500 bytes
🐛 故障排除
常见问题
Q: 扩展方法不可用?
// 确保引入命名空间
using ASW.Utility.Extensions;
Q: 日志文件无法写入?
// 检查目录权限
var settings = new FileLoggerSettings {
LogDirectory = "./logs", // 确保目录存在且有写权限
CreateDirectoryIfNotExists = true
};
// 检查磁盘空间
if (new DirectoryInfo(settings.LogDirectory).AvailableFreeSpace < 1024 * 1024) {
// 磁盘空间不足
}
Q: 雪花ID重复?
// 确保WorkerId和DatacenterId在集群中唯一
var generator1 = new SnowIdGenerator(workerId: 1, datacenterId: 1);
var generator2 = new SnowIdGenerator(workerId: 2, datacenterId: 1); // 不同的WorkerId
// 检查系统时钟
if (DateTime.Now < lastGenerateTime) {
throw new Exception("系统时钟回退,可能导致ID重复");
}
性能优化
// 1. 缓存频繁使用的正则表达式
private static readonly Regex EmailRegex = new Regex(@"^[^@]+@[^@]+\.[^@]+$", RegexOptions.Compiled);
// 2. 使用StringBuilder进行大量字符串操作
var sb = new StringBuilder();
foreach (var item in largeList) {
sb.AppendLine(item.ToString());
}
string result = sb.ToString();
// 3. 避免在循环中创建重型对象
var logger = LoggerHelper.CreateLogger("MyClass"); // 在类级别创建
for (int i = 0; i < 1000; i++) {
logger.LogInformation($"Processing item {i}"); // 重复使用
}
🤝 贡献
欢迎提交Issue和Pull Request来改进这个项目。
📄 许可证
本项目基于 MIT 许可证开源。详见 LICENSE 文件。
🔗 相关项目
- ASW.MessageQueue - 使用本库的日志和工具功能
- ASW.Net - 使用本库的扩展方法和工具
- ASW.Wpf - WPF扩展库
- ASW.Windows - Windows系统工具库
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net10.0
- Microsoft.Extensions.Logging (>= 10.0.6)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.6)
- Newtonsoft.Json (>= 13.0.4)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on mgzhenhong.ASW2.Utility:
| Package | Downloads |
|---|---|
|
mgzhenhong.ASW2.Net
ASW.Net |
|
|
mgzhenhong.ASW2.MessageQueue
ASW.MessageQueue |
|
|
mgzhenhong.ASW2.Wpf
ASW.Wpf |
|
|
mgzhenhong.ASW2.WpfControls
ASW.WpfControls |
|
|
mgzhenhong.ASW2.Net.EventChannel
ASW.Net.EventChannel |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.1.3 | 142 | 5/11/2026 |
| 2.1.2 | 152 | 5/9/2026 |
| 2.1.1 | 143 | 4/15/2026 |
| 2.0.43 | 189 | 3/7/2026 |
| 2.0.42 | 154 | 3/6/2026 |
| 2.0.41 | 183 | 2/6/2026 |
| 2.0.40 | 190 | 2/4/2026 |
| 2.0.39 | 172 | 2/4/2026 |
| 2.0.38 | 175 | 2/3/2026 |
| 2.0.37 | 178 | 2/1/2026 |
| 2.0.36 | 187 | 2/1/2026 |
| 2.0.35 | 187 | 2/1/2026 |
| 2.0.34 | 184 | 2/1/2026 |
| 2.0.33 | 196 | 1/31/2026 |
| 2.0.32 | 180 | 1/30/2026 |
| 2.0.31 | 185 | 1/22/2026 |
| 2.0.30 | 185 | 1/22/2026 |
| 2.0.29 | 180 | 1/21/2026 |
| 2.0.28 | 172 | 1/20/2026 |
| 2.0.27 | 183 | 1/12/2026 |
Loading failed