这是我的类:
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
请帮帮我
-
nestedOne
是FieldInfo
的实例。 - 调用
nestedOne.GetType()
将给你一个代表FieldInfo
类型的Type
实例。 - 因为
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