如何使用反射显示用户列表

时间:2014-04-10 12:14:21

标签: c# reflection

我有图书馆和控制台程序。这个程序加载动态库。该程序创建类用户的实例并修改了一些值。之后程序显示结果。我尝试编写一些代码,但它不是编译的。你能帮我解决这个问题吗? 图书馆代码:

public class Class1
{
    List<User> user;
    public Class1()
    {
        user = new List<User>() { new User() { name = "Smith", age = 19 }, new User() { name = "Mitchell", age = 41 } };
    }
}
public class User
{
    public String name;
    public int age;
}

程序代码:

            Assembly asm = Assembly.LoadFile(@"C:\TestLibrary.dll");
            Type Class1 = asm.GetType("TestLibrary.Class1") as Type;
            Type User = asm.GetType("TestLibrary.User") as Type;
            var testClass = Activator.CreateInstance(Class1);
            MemberInfo[] List = Class1.GetMember("user");
            FieldInfo field = (FieldInfo)List[0];
            List<User> users = (List<User>)field.GetValue(testClass);
            users[0].name = "Scott";
            users[1].age = 21;
            foreach (User us in users)
            {
                Console.WriteLine("User: {0}, Age: {1}",us.name,us.age);
            }

1 个答案:

答案 0 :(得分:0)

您需要指定正确的BindingFlags,否则只返回公开成员(在您的情况下user是私有的):

MemberInfo[] List = Class1.GetMember("user", BindingFlags.NonPublic | BindingFlags.Instance);