You need to enable JavaScript to run this app. C#如何通过反射搭配BindingFlags获取带get访问器的公共属性
优惠活动
大模型
产品
解决方案
定价
更多

C#如何通过反射搭配BindingFlags获取带get访问器的公共属性

问题原因&解决方法

错误点分析

  • 你当前代码的核心问题是使用了按位与&组合BindingFlags枚举值:BindingFlags属于[Flags]特性标记的标志枚举,多个枚举值组合时必须使用按位或|,用&计算会得到数值为0的结果,自然匹配不到任何属性。
  • 其次BindingFlags.GetProperty是用于InvokeMember这类成员调用场景的标志,GetProperties方法查询属性时不需要传入该值。

正确实现代码

你的需求是匹配所有公共实例属性中存在get访问器的项(无论是否有set访问器),可以按如下方式实现:

// 第一步:获取所有公共的实例属性
var allPublicInstanceProps = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
// 第二步:过滤出带有get访问器的属性,符合"仅get"或"get+set都存在"的要求
var targetProperties = allPublicInstanceProps.Where(prop => prop.GetMethod != null).ToList();

如果你需要额外过滤只保留只有get访问器的只读属性,可以把过滤条件修改为:

var readOnlyProps = allPublicInstanceProps.Where(prop => prop.GetMethod != null && prop.SetMethod == null).ToList();

内容的提问来源于stack exchange,提问作者Neeraj Kumar Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 23:06:04