创建一种方法来遍历对象特性

本文关键字:遍历 对象 方法 一种 创建 | 更新日期: 2023-09-27 18:27:01

有没有办法编写代码来做到这一点:

MyObject中的Foreach属性;检查属性上是否有DataMember Validator。IsRequired=true;

[DataMember(Order = 2, IsRequired=true)]
public string AddressLine1 { get; set; }
[DataMember(Order = 3)]
public string AddressLine2 { get; set; }

如果是,请检查对象中是否有notNull或空值;

总之,我创建了一个名为CheckForRequiredFields(object o)的方法

在这种情况下,传递一个具有上面列出的属性的"Address"对象。代码Sees第一个属性的RequiredField=true,因此它检查传递给它的Address对象是否具有AddressLine1 的值

创建一种方法来遍历对象特性

类似的东西(来自内存,因此无法保证正确性):

foreach(var propInfo in o.GetType().GetProperties())
{
    var dmAttr = propInfo.GetCustomAttributes(typeof(DataMemberAttribute), false).FirstOrDefault() as DataMemberAttribute;
    if (dmAttr == null)
        continue;
    object propValue = propInfo.GetValue(o, null);
    if (dmAttr.IsRequired && propValue == null)
        // It is required but does not have a value... do something about it here
}

是的,有。看看反射。您可以接受您的类型,对其调用Type.GetProperties(),并为每个属性检索PropertyInfo

PropertyInfo可以获得其属性(使用GetCustomAttributes方法),并查找DataMember属性。如果您找到一个,请检查其IsRequired