无法通过反射得到场

时间:2014-06-23 10:20:38

标签: c# reflection

这是我的班级:

public static class Root
{
    private static readonly NestedOne nestedOne;

    static Root()
    {
        nestedOne = new NestedOne();
    }

    class NestedOne
    {
        private string FindMe = "blabla";
    }
}

我需要通过Root获取名为“FindMe”的字段。我成功地获得了NestedOne的实例:

var nestedOne = typeof(Root).GetField("nestedOne", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);

但无法进一步:

var fields = nestedOne.GetType().GetFields(BindingFlags.NonPublic);  // there is empty

请帮帮我

4 个答案:

答案 0 :(得分:3)

  1. nestedOneFieldInfo
  2. 的一个实例
  3. 致电nestedOne.GetType()会为您提供代表Type类型的FieldInfo个实例。
  4. 由于Type没有字段,因此您将获得一个空集合。
  5. 您要做的是使用FieldType属性而不是调用.GetType()

    nestedOne.FieldType.GetFields(...)
    

    您还需要为实例字段指定BindingFlags.Instance标志。

    演示:https://dotnetfiddle.net/kZxvMp

答案 1 :(得分:3)

您要查找的字段是实例字段,您需要在搜索中包含该类别,方法是指定BindingFlags.Instance标记

GetFields(BindingFlags.NonPublic | BindingFlags.Instance)

答案 2 :(得分:1)

尝试使用GetNestedTypes

Type[] myTypeArray = myType.GetNestedTypes(BindingFlags.NonPublic|BindingFlags.Instance);

答案 3 :(得分:0)

根据MSDN文档,您必须指定BindingFlags.Instance http://msdn.microsoft.com/en-us/library/6ztex2dc%28v=vs.110%29.aspx