C# 如何使用反射检索特定类型的所有字段和/或属性?
我需要使用反射来检索特定类型的字段或属性的值 我不知道C# 如何使用反射检索特定类型的所有字段和/或属性?,c#,.net,reflection,C#,.net,Reflection,我需要使用反射来检索特定类型的字段或属性的值 我不知道 这是一块田地 这是一笔财产 上述任何一项都是私人或公共的 我不能做出假设,所以我希望用反射来解决这个问题。我希望开发者能把这些私人领域。。。但我不能这样假设 如何查找具有..的类型Foo的所有字段/属性。。说整数 .NET V4.0或4.5。Linq也是可以接受的:) 我想要类似以下伪代码的东西: var property = source.GetType() .GetProperties(Bi
- 这是一块田地
- 这是一笔财产
- 上述任何一项都是私人或公共的
Foo
的所有字段/属性。。说<代码>整数
.NET V4.0或4.5。Linq也是可以接受的:)
我想要类似以下伪代码的东西:
var property = source.GetType()
.GetProperties(BindingFlags.GetField | BindingFlags.NonPublic)
.Where(x => x.PropertyType == typeof (int))
.ToList();
诸如此类
const BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.DeclaredOnly;
PropertyInfo[] properties = yourType.GetProperties(flags);
FieldInfo[] fields = yourType.GetFields(flags);
var intProperties = properties.Where(x => x.PropertyType == typeof (int));
var intFields = fields.Where(x => x.FieldType == typeof (int));
你也可以这样写(更接近你的例子)
既然您已经编辑了一些代码,那么该代码有什么问题?“像这样吗”?您还需要什么?如果使用
GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
您将同时获得公共和非公共实例属性。您还需要使用相同的方法调用GetFields
。您也可以调用GetMembers
,但如果需要筛选属性类型和字段类型,则使用它会稍微困难一些。@LasseV.Karlsen-不能这样做吗<代码>BindingFlags.GetField | BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Public?您不能要求GetProperties返回字段。但是--这是如何实现的只筛选出一种类型。。说int
或Foo
或其他什么?就像你提到的yourType.GetProperties(flags)。其中(x=>x.PropertyType==typeof(int));其中(x=>x.FieldType==typeof(int))<代码>字段。其中(f=>f.FieldType==typeof(int))
const BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.DeclaredOnly;
var intProperties = yourType.GetProperties(flags)
.Where(x => x.PropertyType == typeof (int));
var intFields = yourType.GetFields(flags)
.Where(x => x.FieldType == typeof (int));