C#常用工具类详解
一、前言:为什么必须用好C#工具类?
很多新手开发者偏爱手写基础工具逻辑,看似灵活,实则隐患极多,核心问题如下:
-
代码冗余臃肿:项目中重复写判空、字符串裁剪、日期格式化、集合遍历过滤逻辑,代码复用率极低
-
BUG概率飙升:手写逻辑极易出现空引用异常、日期越界、字符串空值报错、类型转换失败等问题
-
性能优化不足:.NET原生工具类经过微软底层深度优化,内存占用、执行效率远优于自定义手写逻辑
-
团队规范混乱:全员手写工具逻辑会导致代码风格不统一,后期迭代、排查问题、代码重构成本极高
接下来按开发高频场景,逐一讲解C#核心常用工具类的实战用法、核心方法及避坑要点。
二、C#原生高频工具类(无需引入第三方NuGet)
这类工具类属于.NET基础类库,无需安装任何插件、NuGet包,新建项目即可直接使用,是日常开发的首选,优先级最高。
1. string 字符串静态工具类(核心必备)
字符串处理是C#开发最常用的场景,原生 string 静态工具方法 可以完美解决空值判断、字符串拼接、分割、替换、格式化等场景,规避大量手写BUG。
核心常用方法实战代码:
using System;
namespace CSharpUtilDemo
{
class StringUtilDemo
{
static void Main(string[] args)
{
string str1 = null;
string str2 = "";
string str3 = " .NET工具类 ";
// 1. 核心判空:判断是否为NULL或空字符串(最常用)
Console.WriteLine(string.IsNullOrEmpty(str1)); // True
Console.WriteLine(string.IsNullOrEmpty(str2)); // True
// 2. 判断是否为NULL、空、空白字符(进阶判空,推荐)
Console.WriteLine(string.IsNullOrWhiteSpace(str3)); // False
// 3. 字符串拼接(高效拼接,优于+号)
string joinStr = string.Join("-", 2026, 6, 25);
Console.WriteLine(joinStr); // 2026-6-25
// 4. 字符串格式化
string formatStr = string.Format("当前框架:{0},版本:{1}", ".NET Core", "6.0");
Console.WriteLine(formatStr);
// 5. 对比字符串(忽略大小写,规避大小写匹配BUG)
bool isEqual = string.Equals("Net", "net", StringComparison.OrdinalIgnoreCase);
Console.WriteLine(isEqual); // True
}
}
}
避坑指南:禁止直接使用 str==null 或 str=="" 单独判空,业务场景优先使用string.IsNullOrEmpty,含空白字符校验场景必须用 string.IsNullOrWhiteSpace。
2. Convert 类型转换工具类
Convert 是C#原生万能类型转换工具类,支持字符串、数字、布尔、日期等所有基础类型的互相转换,是类型解析、参数转换的核心工具。
核心实战代码:
using System;
namespace CSharpUtilDemo
{
class ConvertUtilDemo
{
static void Main(string[] args)
{
string numStr = "1024";
string boolStr = "true";
// 字符串转整数
int num = Convert.ToInt32(numStr);
// 字符串转布尔
bool flag = Convert.ToBoolean(boolStr);
// 数字转字符串
string str = Convert.ToString(2026);
// 字符串转日期
DateTime date = Convert.ToDateTime("2026-06-25");
Console.WriteLine(num);
Console.WriteLine(flag);
Console.WriteLine(str);
Console.WriteLine(date);
}
}
}
避坑指南:Convert转换失败会直接抛异常,不确定参数合法性时,优先使用 int.TryParse、DateTime.TryParse 安全转换。
3. DateTime 日期时间工具类
DateTime 是C#原生日期处理工具,覆盖日期获取、格式化、时间加减、时间戳转换等所有基础时间场景,是业务开发必备工具。
核心实战代码:
using System;
namespace CSharpUtilDemo
{
class DateTimeUtilDemo
{
static void Main(string[] args)
{
// 获取当前系统时间
DateTime now = DateTime.Now;
// 获取当前UTC时间(服务器推荐使用,规避时区问题)
DateTime utcNow = DateTime.UtcNow;
// 获取今日日期(零点时间)
DateTime today = DateTime.Today;
// 时间加减
DateTime tomorrow = now.AddDays(1); // 明天
DateTime lastHour = now.AddHours(-1); // 上一小时
// 日期格式化
string dateStr = now.ToString("yyyy-MM-dd HH:mm:ss");
Console.WriteLine("当前时间:" + dateStr);
// 获取时间戳(13位毫秒级)
long timeStamp = new DateTimeOffset(now).ToUnixTimeMilliseconds();
Console.WriteLine("时间戳:" + timeStamp);
}
}
}
避坑指南:跨时区、服务器部署场景禁止使用 DateTime.Now,优先使用 DateTime.UtcNow,避免时区偏差导致时间错乱。
4. Array / Enumerable 集合工具类
C#原生集合工具配合LINQ,可快速实现数组、集合的遍历、过滤、排序、去重、判空,无需手写循环逻辑。
核心实战代码:
using System;
using System.Linq;
namespace CSharpUtilDemo
{
class CollectionUtilDemo
{
static void Main(string[] args)
{
int[] nums = { 1, 2, 2, 3, 4, 5 };
// 集合判空
bool isEmpty = nums == null || !nums.Any();
Console.WriteLine("集合是否为空:" + isEmpty);
// 去重
var distinctNums = nums.Distinct().ToArray();
// 过滤大于2的数字
var filterNums = nums.Where(x => x > 2).ToList();
// 排序
var orderNums = nums.OrderBy(x => x).ToArray();
Console.WriteLine("去重后:" + string.Join(",", distinctNums));
Console.WriteLine("过滤后:" + string.Join(",", filterNums));
}
}
}
避坑指南:集合判空优先使用 Any() 而非 Count()>0,Any() 找到第一个元素即终止,性能更高。
三、.NET高频拓展工具方法(原生推荐)
除了静态工具类,C#拓展方法是开发中最实用的特性,无需实例化、直接点调用,极大简化代码,以下是项目中通用的高频拓展。
1. 通用对象判空拓展
using System;
namespace CSharpUtilDemo
{
public static class ObjectExtend
{
// 对象判空
public static bool IsNull(this object obj)
{
return obj == null;
}
// 对象非空
public static bool IsNotNull(this object obj)
{
return obj != null;
}
}
}
2. 字符串常用拓展
using System;
namespace CSharpUtilDemo
{
public static class StringExtend
{
// 字符串空判断
public static bool IsEmpty(this string str)
{
return string.IsNullOrWhiteSpace(str);
}
// 去除首尾空格
public static string TrimAll(this string str)
{
return str?.Trim() ?? string.Empty;
}
}
}
总结:C#工具类使用最佳实践
-
优先原生:基础判空、转换、日期、集合操作优先使用.NET原生工具,无第三方依赖、性能最优
-
规避异常:类型转换、字符串解析场景,优先使用Try系列安全方法,避免程序崩溃
-
统一封装:项目通用逻辑统一封装拓展方法,杜绝重复代码,统一团队编码规范
-
按需引入:复杂业务场景按需引入Newtonsoft、NPOI等第三方库,不滥用依赖
更多推荐

所有评论(0)