C# IsWhat通用判断扩展类用法与源码

Oliver
Oliver
发布时间:2026-10-13 | 5人浏览过
原创

在C#和ASP.NET开发中,频繁的数据类型校验往往会导致代码冗余。IsWhat是一个基于静态类的扩展方法集合,旨在简化对数字、字符串、身份证、邮箱等数据的条件判断,使业务逻辑更加简洁清晰。

核心功能概览

IsWhat位于SyntacticSugar命名空间中,提供了一系列针对基础类型的扩展函数,覆盖了日常开发中高频出现的判空、取值范围检查及格式验证场景。

第1步:数值与状态校验

此类扩展消除了传统多重条件判断的繁琐写法,支持整型、日期时间及对象类型的统一处理。

  • 区间判断:IsInRange(begin, end) 用于检查数值是否在指定闭区间内,适用于int和DateTime类型。
  • 空值检测:IsNullOrEmpty() 综合判断对象是否为null或空字符串,特别增强了对DBNull.Value及Guid类型的支持;其反向操作为IsValuable(),用于确认数据有效。
  • 存在性检查:IsIn(values...) 采用泛型参数,判断当前元素是否属于给定列表,替代冗长的“OR”条件链。

第2步:格式与身份验证

针对常见业务标识符,封装了基于正则表达式的专用校验方法,开发者无需额外引用复杂的Regex配置即可快速完成拦截:

  • 身份证:IsIDcard() 兼容15位老版及18位新版身份证号规则。
  • 联系方式:IsMobile() 校验11位手机号;IsTelephone() 识别带区号的固定座机号码。
  • 其他格式:IsEamil() 符合标准邮箱结构;IsMoney() 尝试将字符串转换为浮点数以判断是否为金额格式。

第3步:灵活的正则匹配

除预设方法外,IsMatch(pattern) 允许传入自定义正则表达式模式,实现任意规则的字符串内容匹配,既省去了手动创建Regex对象的开销,也避免了多次引入命名空间。

使用方法

在项目中引用该工具类后,任何继承自object的实例均可直接调用上述扩展方法。以下为典型使用场景对照:

1. 区间与集合判断

// 旧式写法:需书写多层括号与逻辑运算符
if (num >= 100 && num <= 1000) { ... }

// 新式写法:语义更直观
if (num.IsInRange(100, 1000)) { ... }

2. 对象有效性筛选

// 检查集合是否存在且非空
List<string> list = null;
if (list.IsValuable()) { ... }

3. 证件与信息过滤

// 直接对字面量进行身份证合法性检查
if ("32061119810104311x".IsIDcard()) {
    // 通过验证的业务逻辑
}

源代码参考

以下为核心功能的C#静态类实现代码。在实际部署时,可根据具体业务需求对其中的正则规则进行微调:

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace SyntacticSugar
{
    public static class IsWhat
    {
        public static bool IsInRange(this int o, int begin, int end) 
            => o >= begin && o <= end;

        public static bool IsInRange(this DateTime o, DateTime begin, DateTime end) 
            => o >= begin && o <= end;

        public static bool IsIn<T>(this T o, params T[] values) 
            => values.Contains(o);

        public static bool IsNullOrEmpty(this object o)
        {
            if (o == null || o == DBNull.Value) return true;
            return o.ToString() == "";
        }

        public static bool IsValuable(this object o)
        {
            if (o == null) return false;
            return o.ToString() != "";
        }

        public static bool IsInt(this object o)
        {
            if (o == null) return false;
            return Regex.IsMatch(o.ToString(), @"^\d+$");
        }

        public static bool IsMoney(this object o)
        {
            if (o == null) return false;
            double outValue = 0;
            return double.TryParse(o.ToString(), out outValue);
        }

        public static bool IsEamil(this object o)
        {
            if (o == null) return false;
            return Regex.IsMatch(o.ToString(), @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$");
        }

        public static bool IsMobile(this object o)
        {
            if (o == null) return false;
            return Regex.IsMatch(o.ToString(), @"^\d{11}$");
        }

        public static bool IsIDcard(this object o)
        {
            if (o == null) return false;
            return Regex.IsMatch(o.ToString(), @"^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$");
        }

        public static bool IsMatch(this object o, string pattern)
        {
            if (o == null) return false;
            Regex reg = new Regex(pattern);
            return reg.IsMatch(o.ToString());
        }
    }
}

以上就是C# IsWhat通用工具类IsWhat的详细内容,更多关于C# 扩展方法与ASP.NET数据校验的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表