当前位置: 首页 > article >正文

C#高级:通过反射判断列表中指定字段是否存在空值

1.使用

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Grade { get; set; }
}

public static void Main()
{
    // 创建一些学生对象
    var students = new List<Student>
    {
        new Student { Name = "John", Age = 20, Grade = "A" },
        new Student { Name = null, Age = 22, Grade = "B" },
        new Student { Name = "", Age = 0, Grade = "" },  // 空白字段
        new Student { Name = "Alice", Age = 21, Grade = null }
    };

    // 调用方法,检查是否有字段为空或空白
    var result = GetNotNullOrEmptyList(students, new List<string> { "Grade" }); // 排除Grade字段为空的检查

    // 输出结果
    Console.WriteLine("是否存在空值: " + result.HasNull);
    Console.WriteLine("详细分析:"+ result.Analysis);

    //是否存在空值: True
    //详细分析:列表实体序号: 2,Name的值为空或null!
    //列表实体序号: 3,Name的值为空或null!
}

2.封装 

/// <summary>
/// 判断列表字段内容是否存在NullOrWhiteSpace的情况,若有则返回出具体信息
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list">传入待判断列表</param>
/// <param name="FeildsAllowNullList">允许为空的字段名称列表(不传默认判断所有字段)</param>
public static (bool HasNull, string Analysis) GetNotNullOrEmptyList<T>(List<T> list, List<string> FeildsAllowNullList = null) where T : class
{
    StringBuilder sb = new StringBuilder();
    bool HasNull = false;
    List<PropertyInfo> feildList = typeof(T).GetProperties().ToList();
    if (FeildsAllowNullList != null)
    {
        feildList = feildList.Where(x => !FeildsAllowNullList.Contains(x.Name)).ToList();
    }
    int index = 1;
    foreach (var entity in list)
    {
        foreach (var item in feildList)
        {
            if (string.IsNullOrWhiteSpace(item.GetValue(entity)?.ToString()))
            {
                sb.AppendLine($"列表实体序号:{index},{item.Name}的值为空或null!");
                HasNull = true;
            }
        }
        index++;
    }
    return (HasNull: HasNull, Analysis: sb.ToString());
}


http://www.kler.cn/a/404641.html

相关文章:

  • NVR录像机汇聚管理EasyNVR大华NVR管理平台:深耕视频监控市场的多元化兼容
  • Ubuntu安装Electron环境
  • tcp/ip异常断开调试笔记——lwip
  • 测试工程师如何在面试中脱颖而出
  • 【软考】系统架构设计师-信息系统基础
  • 【实用数据】上市公司数字化转型双重差分准自然实验数据(2007-2022年)
  • 笔记记录 k8s-RBAC
  • MySQL最后练习,转转好物交易平台项目
  • wpf中几种获取ComBox中值的方法
  • 机器学习基础06_梯度下降
  • 基于Java Springboot导师选择管理系统
  • Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞复现(CVE-2024-0012)
  • 【golang-技巧】- context 使用
  • spacy 安装 en_core_web_sm
  • MySQL中有哪几种锁?
  • Linux基础指令(汇总)
  • StarRocks 架构
  • Flutter:AnimatedPadding动态修改padding
  • 云原生之k8s服务管理
  • idea启动服务报错Application run failed
  • 目标驱动学习python动力
  • MySQL创建和管理触发器
  • (附项目源码)Java开发语言,215 springboot 大学生爱心互助代购网站,计算机毕设程序开发+文案(LW+PPT)
  • 常用命令集
  • vue2中引入cesium全步骤
  • MongoDB调优利器:掌握性能分析工具mongostat