如何使用反射来检索特定类型的所有字段和/或属性?

时间:2015-09-08 10:59:57

标签: c# .net reflection

我需要使用反射来检索特定类型的字段或属性的值。

我不知道是否

  • 这是一个字段
  • 这是一个属性
  • 以上任何一种都是私人或公开的。

我不能做出假设所以我希望用反射来解决这个问题。我希望开发人员会创建这些私有字段......但我不能认为。

如何查找类型为Foo的所有字段/属性...说... int

.NET v 4.0或4.5请。 Linq也是可以接受的:)

我想要这样的伪代码:

var property = source.GetType()
                     .GetProperties(BindingFlags.GetField | BindingFlags.NonPublic)
                     .Where(x => x.PropertyType == typeof (int))
                     .ToList();

1 个答案:

答案 0 :(得分:3)

像这样的东西

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

你也可以这样写(这更贴近你的例子)

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