无法通过反射获得场

  • 本文关键字:反射 c# reflection
  • 更新时间 :
  • 英文 :


这是我的类:

public static class Root
{
    private static readonly NestedOne nestedOne;
    static Root()
    {
        nestedOne = new NestedOne();
    }
    class NestedOne
    {
        private string FindMe = "blabla";
    }
}

我需要通过根获取那个名为'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

请帮帮我

  1. nestedOneFieldInfo的实例。
  2. 调用nestedOne.GetType()将给你一个代表FieldInfo类型的Type实例。
  3. 因为Type没有字段,你得到一个空的集合。

你要做的是使用FieldType属性而不是调用.GetType()

nestedOne.FieldType.GetFields(...)

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

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

您正在查找的字段是一个实例字段,您需要通过指定BindingFlags.Instance标志在搜索中包含该类别

GetFields(BindingFlags.NonPublic | BindingFlags.Instance)

尝试使用GetNestedTypes

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

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

相关内容

  • 没有找到相关文章