这是我的代码:
public class Test
{
string a;
int b;
}
public class Test2
{
string c;
string d
int e;
}
我正在将它编译为DLL并使用以下方法提取这两个类:
var library = Assembly.LoadFrom(libraryPath);
IEnumerable<Type> types = library.GetTypes();
然后“foreach type in types”,我想得到一个我的变量列表,但不知道该怎么做......我正在尝试:
var lib = Activator.CreateInstance(type);
Type myType = lib.GetType();
IList<PropertyInfo> props = new List<PropertyInfo>(myType.GetProperties());
foreach (PropertyInfo prop in props)
{
// Do something with propValue
}
“道具”一直都是空的......
任何帮助?
答案 0 :(得分:8)
您的课程未指定任何属性。他们指定私人领域。这意味着:
GetFields
,而不是GetProperties
BindingFlags.NonPublic | BindingFlags.Instance
,以便为您提供非公开实例字段或者,您可以将类更改为具有公共属性。
答案 1 :(得分:2)
您展示的不是属性,而是字段 - 因此您需要致电myType.GetFields()
。对于私人字段等,您需要使用相应的BindingFlags
进行调用。
答案 2 :(得分:1)
我想你的意思是
var instance = Activator.CreateInstance(myType);
FieldInfo[] fields = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo field in fields)
{
object value = field.GetValue(instance);
// Do something with field value...
}
获取您需要使用GetFields的字段列表。
获取使用GetMethods的方法列表。
要获取需要使用GetProperties的属性列表。
获取使用GetEvents所需的事件列表。
而且......在这种情况下你不需要创建一个List,你确定需要创建一个列表吗?你可以使用数组,它总是返回一个副本。