DevExpress XPO:遍历XPObject子类属性的替代方案咨询
遍历XPObject子类所有关联属性(含非持久化)的替代方案
当然不是只能靠Members属性做大量过滤转换,你可以用以下两种更高效的方式:
方案一:利用XAF类型信息系统(推荐)
XAF的类型信息系统已经封装了类的元数据,能直接获取所有成员(包括非持久化的),筛选逻辑更简洁:
// 获取目标对象的类型元数据 var typeInfo = XafTypesInfo.Instance.FindTypeInfo(yourTargetObject.GetType()); // 筛选所有类型为XPObject子类的属性 var allXpObjectProperties = typeInfo.Members .Where(member => typeof(XPObject).IsAssignableFrom(member.MemberType)) .ToList();
这个方式会自动识别框架处理过的成员,不用额外判断持久化标记,因为ITypeInfo.Members本身就包含所有公开实例成员。
方案二:直接用.NET反射
如果不想依赖XAF的类型信息系统,直接用反射也能实现,只需过滤属性类型:
var allXpObjectProperties = yourTargetObject.GetType() .GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(prop => typeof(XPObject).IsAssignableFrom(prop.PropertyType)) .ToList();
要是需要针对性保留或排除[NonPersistent]标记的属性,只需在Where条件里加判断:
// 示例:只保留标记了NonPersistent的XPObject类型属性 var nonPersistentXpProps = yourTargetObject.GetType() .GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(prop => typeof(XPObject).IsAssignableFrom(prop.PropertyType) && prop.GetCustomAttribute<NonPersistentAttribute>() != null) .ToList();
内容的提问来源于stack exchange,提问作者Kuba D
相关产品推荐
相关产品推荐

