C# 利用特性(Attribute)实现自定义验证

简介: 通过自定义特性(如RequiredAttribute)标记类属性,利用反射实现数据验证逻辑。示例代码展示了如何在对象中检查必填字段,并输出验证错误信息,实现灵活的数据校验机制。

自定义特性标记类或属性,通过反射实现数据验证逻辑。

// 自定义必填特性
[AttributeUsage(AttributeTargets.Property)]
public class RequiredAttribute : Attribute { }
// 数据验证工具
public class DataValidator
{
    public static bool Validate(object obj, out List<string> errors)
    {
        errors = new List<string>();
        var properties = obj.GetType().GetProperties();
        foreach (var prop in properties)
        {
            var requiredAttr = prop.GetCustomAttribute<RequiredAttribute>();
            if (requiredAttr != null)
            {
                var value = prop.GetValue(obj);
                if (value == null || string.IsNullOrEmpty(value.ToString()))
                {
                    errors.Add($"{prop.Name} 为必填项");
                }
            }
        }
        return errors.Count == 0;
    }
}
// 测试实体
public class User
{
    [Required]
    public string Name { get; set; }
    public int Age { get; set; }
}
// 调用示例
public static void TestAttribute()
{
    var user = new User { Age = 25 };
    if (!DataValidator.Validate(user, out var errors))
    {
        foreach (var err in errors) Console.WriteLine(err);
    }
}
相关文章
|
7月前
|
存储 开发框架 缓存
C# 实现图片验证码的 WebAPI 版(ASP.NET Core)
基于ASP.NET Core实现的验证码服务,生成带干扰线和随机旋转文字的4位图文验证码,支持内存存储与验证。需安装System.Drawing.Common包。
|
7月前
|
C#
C# 实现简单的定时任务工具
基于 `System.Timers.Timer` 实现定时任务,支持周期性与单次执行。通过封装 Timer 类,提供启动、停止功能,并包含异常处理,确保任务稳定运行,适用于后台定时操作场景。
|
7月前
|
C#
C# 实现图片压缩工具(基础版)
基于 System.Drawing 实现图片尺寸缩放与质量压缩,支持常见格式。通过计算缩放比例生成新图像,并调整压缩质量以减小文件大小。适用于 .NET 平台,需安装 System.Drawing.Common NuGet 包。
|
7月前
|
C#
C# 实现简单的 AOP(面向切面编程)
通过反射与委托实现AOP,可在方法执行前后动态添加日志、计时等横切逻辑,提升代码复用性与可维护性。
|
7月前
|
网络协议 安全 C#
C# 实现基于 TCP 的简单聊天程序(服务端)
基于TcpListener实现TCP聊天服务器,监听指定端口,接收客户端连接并实时转发消息。支持多客户端并发通信,新连接自动加入广播列表,断开后自动移除,确保线程安全与稳定运行。
|
10月前
|
Linux Windows
远程桌面复制粘贴用不了?3个简单操作,立即恢复
远程桌面复制粘贴失灵?别急!本文三步教你快速修复:检查本地粘贴板共享设置、重启服务器rdpclip.exe进程,并重新启动该进程恢复功能。附常见问题与注意事项,轻松解决传输中断、大文件卡顿等问题,提升远程操作效率。
3456 8
LabVIEW异步调用VI的多个实例实现并行执行
LabVIEW异步调用VI的多个实例实现并行执行
1009 1