如何在C#中获取泛型类型的字段

How to get fields of a generic type in C#

说我有一个通用的 class

class Foo<T>
{
   T fooVal;
   public T FooVal { get { return fooVal; } }
}

我想从实例化类型中获取 fooVal 的 FieldInfo:

Foo<int> fooInt = new foo<int>();
FieldInfo fooValField = fooInt.GetType().GetField("fooVal");

问题是,fooValField 为空。即使我调用 GetFields() 它 returns 一个空数组。我知道类型是正确的,因为反射告诉我它是 Foo'1。我只是不明白为什么它看不到 fooVal 字段。我在这里缺少什么吗?如果我调用 GetProperties,我可以看到 FooVal 属性,所以我希望 fooVal 字段也显示出来?

您需要使用

        Foo<int> fooInt = new Foo<int>();
        FieldInfo fooValField = fooInt.GetType().GetField("fooVal", BindingFlags.NonPublic | BindingFlags.Instance);

因为字段不是public.