C# - Get class field property value
本问题已经有最佳答案,请猛点这里访问。
假设我有一个类,它由具有如下属性的其他类组成:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
我想遍历所有ClassA字段,然后遍历它们的属性并获取它们的值。我创建了简单的控制台应用程序来测试这一点。
1 2 3 4 5 6 7 8 9 10 11 | classA classA = new classA(); classA.classAA.propertyA ="A"; classA.classAB.propertyB ="B"; foreach (FieldInfo memberAField in classA.GetType().GetFields()) { Console.WriteLine(memberAField.Name +"" + memberAField.MemberType +"" + memberAField.FieldType); foreach (PropertyInfo classAProperty in memberAField.FieldType.GetProperties()) { Console.WriteLine("name:" + classAProperty.Name); Console.WriteLine(" to value:" + classAProperty.GetValue(memberAField)); } } |
号
现在我不知道要将什么传递给getValue函数。我已经尝试了所有我能想到的,但我总是得到错误"对象不匹配目标类型"。我认为问题是memberafield是fieldinfo对象,但是我如何才能得到实际的系统对象呢?
编辑:谢谢你们的回答!另外,我不认为这应该标记为副本,因为我认为这是不同的问题。标题很相似,是的。
必须传递要从中获取值的实例。
首先,你必须得到
1 | Console.WriteLine(" to value:" + classAProperty.GetValue(memberAField.GetValue(classA))); |
完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | classA classA = new classA(); classA.classAA.propertyA ="A"; classA.classAB.propertyB ="B"; foreach (FieldInfo memberAField in classA.GetType().GetFields()) { Console.WriteLine(memberAField.Name +"" + memberAField.MemberType +"" + memberAField.FieldType); object memberAValue = memberAField.GetValue(classA); foreach (PropertyInfo classAProperty in memberAField.FieldType.GetProperties()) { Console.WriteLine("name:" + classAProperty.Name); if (memberAValue == null) Console.WriteLine(" no value available"); else Console.WriteLine(" to value:" + classAProperty.GetValue(memberAValue)); } } |
号
1 2 3 4 5 6 7 8 9 10 | foreach (FieldInfo memberAField in classA.GetType().GetFields()) { Console.WriteLine(memberAField.Name +"" + memberAField.MemberType +"" + memberAField.FieldType); object memberAValue = memberAField.GetValue(classA); // instance to call GetValue on later. foreach (PropertyInfo classAProperty in memberAField.FieldType.GetProperties()) { Console.WriteLine("name:" + classAProperty.Name); Console.WriteLine(" to value:" + classAProperty.GetValue(memberAValue)); } } |