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" />
                    
Directory.Packages.props
<PackageReference Include="mgzhenhong.ASW2.Utility" />
                    
Project file
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
                    
#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
                    
Install as a Cake Addin
#tool nuget:?package=mgzhenhong.ASW2.Utility&version=2.1.3
                    
Install as a Cake Tool

ASW.Utility

License .NET NuGet

📖 项目简介

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 文件。

🔗 相关项目

Product 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.

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