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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:28:18