一、前言:为什么必须用好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.TryParseDateTime.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等第三方库,不滥用依赖

更多推荐