我有图书馆和控制台程序。这个程序加载动态库。该程序创建类用户的实例并修改了一些值。之后程序显示结果。我尝试编写一些代码,但它不是编译的。你能帮我解决这个问题吗? 图书馆代码:
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);
}
答案 0 :(得分:0)
您需要指定正确的BindingFlags,否则只返回公开成员(在您的情况下user
是私有的):
MemberInfo[] List = Class1.GetMember("user", BindingFlags.NonPublic | BindingFlags.Instance);