c# - 反射:FindMembers 返回空
问题描述
我试图列出具有给定属性的所有成员,我实现了一个使用 FindMembers 的方法,但它总是返回一个空集合。谁能告诉我我做错了什么?
public List<MemberInfo> GetMembers<TClass, TAttribute>()
{
Type type = typeof(TClass);
Type attributeType = typeof(TAttribute);
List<MemberInfo> members = type.FindMembers(MemberTypes.All, BindingFlags.Default, Filter, null).ToList();
return members;
}
public bool Filter(MemberInfo memberInfo, object filterCriteria)
{
return memberInfo.IsDefined(typeof(TestAttribute));
}
[Test]
public string MethodName()
{
return "test";
}
当我这样打电话时:
List<MemberInfo> members = GetMembers<TestClass, TestAttribute>();
它返回空。
解决方案
从文档中,BindingFlags.Default
:
指定没有定义绑定标志。
您需要FindMembers
准确说明您想要什么,例如,如果您想要静态或实例成员的公共成员:
var flags = BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance;
List<MemberInfo> members = type.FindMembers(MemberTypes.All, flags, Filter, null).ToList();
顺便说一句,您可能希望向GetMember
函数添加泛型类型约束以限制属性类型:
public List<MemberInfo> GetMember<TClass, TAttribute>()
where TAttribute : Attribute
推荐阅读
- reactjs - fetch second .then 显示未定义
- flutter - 如何从颤振访问谷歌云数据存储?
- javascript - 我可以在这样的地图内映射吗?
- reactjs - 如何根据 React.js 中的按钮单击来聚焦元素
- c++ - 什么时候应该使用`std::atomic`?
- sql - PostgreSQL 检查数组中的至少一项是否在字符串中
- node.js - 如何保护 Web API 免受未经授权的使用
- javascript - 如何使用基于当前 url 的 javascript 在 jsp 文件中设置 div 项的活动菜单状态?
- pandas - 如何使用源 DataFrame 中满足条件的值更新目标 DataFrame?
- javascript - Vue 导航守卫在 localStorage 硬刷新之前运行