C# Can';我们无法通过反射获得磁场
这是我的班级:C# Can';我们无法通过反射获得磁场,c#,reflection,C#,Reflection,这是我的班级: public static class Root { private static readonly NestedOne nestedOne; static Root() { nestedOne = new NestedOne(); } class NestedOne { private string FindMe = "blabla"; } } 我需要通过根获取名为“FindMe”的字
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
是的一个实例nestedOne.GetType()
将为您提供一个表示FieldInfo
类型的Type
实例Type
没有字段,因此将得到一个空集合.GetType()
您还需要为实例字段指定BindingFlags.Instance
标志
演示:您要查找的字段是实例字段,您需要通过指定
BindingFlags.instance
标志在搜索中包括该类别
GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
根据MSDN文档,必须指定BindingFlags.Instance 尝试使用
哦,我明白了。但是我很困惑,我怎么能设置这个字段的值呢?我知道了:var v=nestedOne.GetValue(null);f、 设定值(v,“123”);这也很有帮助:
GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
Type[] myTypeArray = myType.GetNestedTypes(BindingFlags.NonPublic|BindingFlags.Instance);