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

如何在FastMember中跳过索引器属性?

解决方案

FastMember的Member类型本身确实没有直接提供判断是否为索引器的属性,但可以借助其UnderlyingMember属性结合反射来实现过滤:

修改你的代码如下:

TypeAccessor accessor = TypeAccessor.Create(type);
return accessor.GetMembers()
    .Where(m => m.CanRead)
    .Where(m => {
        // 区分属性和字段,仅过滤掉索引器属性
        if (m.UnderlyingMember is PropertyInfo prop)
        {
            // 索引器属性会有参数,GetIndexParameters返回长度大于0
            return prop.GetIndexParameters().Length == 0;
        }
        // 字段不会是索引器,直接保留
        return true;
    })
    .Select(m => accessor[item, m.Name]);

原理说明

索引器在.NET中本质是带参数的属性,通过反射获取属性的GetIndexParameters()方法,若返回的参数数组长度大于0,就说明这是一个索引器。而Member.UnderlyingMember可以拿到该成员对应的反射对象(PropertyInfo或FieldInfo),借此就能完成判断。

如果你的场景需要频繁处理同类型的成员,建议把过滤后的成员列表缓存起来,避免重复的反射操作影响性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:36:59