5

首先,对不起我的英语不好……我希望你能明白我想说的话。

我有一个小代码问题,我需要获取类属性的值。(这不是我的完整项目,而是我想做的事情的概念。用这个简单的代码,我被阻止了。)

有代码:(此示例可以正常工作。)

using System;
using System.Reflection;

class Example
{
    public static void Main()
    {
        test Group = new test();
        BindingFlags bindingFlags = BindingFlags.Public |
                                    BindingFlags.NonPublic |
                                    BindingFlags.Instance |
                                    BindingFlags.Static;
        Group.sub.a = "allo";
        Group.sub.b = "lol";

        foreach (PropertyInfo property in Group.GetType().GetField("sub").FieldType.GetProperties(bindingFlags))
        {
            string strName = property.Name;
            Console.WriteLine(strName + " = " + property.GetValue(Group.sub, null).ToString());
            Console.WriteLine("---------------");
        }
    }
}

public class test
{
    public test2 sub = new test2();
}

public class test2
{
    public string a { get; set; }
    public string b { get; set; }
}

但我想Group.sub用动态访问替换(比如它的foreach工作GetField(Var)位置)。我尝试了很多组合,但我没有找到任何解决方案。

property.GetValue(property.DeclaringType, null)

或者

property.GetValue(Group.GetType().GetField("sub"), null)

或者

property.GetValue(Group.GetType().GetField("sub").FieldType, null)

所以我想你明白了。我想Group.sub动态地给出对象的实例。因为,在我的整个项目中,我有很多子类。

有任何想法吗?

4

1 回答 1

3

You're already accessing the sub field using Group.GetType().GetField("sub"), you'll need to get its value and hold on to it:

FieldInfo subField = Group.GetType().GetField("sub");

// get the value of the "sub" field of the current group
object subValue = subField.GetValue(Group);
foreach (PropertyInfo property in subField.FieldType.GetProperties(bindingFlags))
{
    string strName = property.Name;
    Console.WriteLine(strName + " = " + property.GetValue(subValue, null).ToString());    
}
于 2017-01-05T10:47:28.593 回答