You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何获取抽象类DbAttributeInstance的静态成员并遍历校验?

问题根因

你写的反射代码存在两个核心错误:

  • 你要获取的DbAttributeInstance里的AALLAN等成员是**字段(Field)**不是属性(Property),调用GetProperties方法本来就无法获取字段成员
  • 你用的绑定标志是BindingFlags.Instance,但是这些成员都是静态成员,需要用BindingFlags.Static标志才能匹配到

实现代码

直接通过反射获取所有符合条件的静态字段,遍历调用校验方法即可,完整代码如下:

using System.Reflection;

// 你的校验逻辑主体,替换YourElementType为你elem变量的实际类型
void ValidateAllDbAttributes(YourElementType elem)
{
    // 获取DbAttributeInstance类里所有public的静态字段
    FieldInfo[] fields = typeof(DbAttributeInstance)
        .GetFields(BindingFlags.Public | BindingFlags.Static);
    
    foreach (FieldInfo field in fields)
    {
        // 过滤字段类型,只保留DbAttribute类型的成员
        if (field.FieldType == typeof(DbAttribute))
        {
            // 静态字段取值不需要实例,传null即可
            DbAttribute attribute = (DbAttribute)field.GetValue(null);
            // 调用校验方法
            bool isValid = elem.IsAttributeValid(attribute);
            
            // 这里可自行扩展校验失败的处理逻辑,示例为打印异常字段名
            if (!isValid)
            {
                Console.WriteLine($"属性 {field.Name} 校验失败");
            }
        }
    }
}

注意事项

  • 如果后续DbAttributeInstance里新增了其他类型的静态成员,上面的类型过滤逻辑会自动跳过,不会影响校验逻辑
  • 如果需要排除某些特定的DbAttribute字段,在循环里加field.Name的判断过滤即可

内容的提问来源于stack exchange,提问作者William Alan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:54:03