Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用反射检索特定类型的所有字段和/或属性?_C#_.net_Reflection - Fatal编程技术网

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));