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
相关产品推荐
相关产品推荐

