我得到了这个有效的代码:
var assembly= Assembly.LoadFrom("D:\\...\\mydll.dll");
Type rmType = assembly.GetType(specific_class_with_namespace);
bject MyObjj = Activator.CreateInstance(rmType);
PropertyInfo[] pi = rmType.GetProperties();
foreach(PropertyInfo prop in pi)
{
Console.WriteLine("Prop: {0}", prop.Name);
}
问题是我想要访问的属性是IEnumerable<IWidget>
,其中IWidget
是我的dll的内部类。所以在我目前的代码中,我无法测试Type
的{{1}}(并将其转换成正确的?:/)
最终目标是访问PropertyInfo
的{{1}}属性。类似的东西:
Name
我在网上阅读了几个教程,在这里有一些关于SO的问题,但没有人帮我解决IWidget
问题:/
编辑:
当我这样做时:
foreach(var widget in myProperty)
{
string widgetName = widget.Name;
}
我可以IEnumerable<customType>
使用“最”的InnerException为“对象与目标类型不匹配”...
答案 0 :(得分:1)
您可以测试属性为IEnumerable
类型,然后在foreach
循环中使用reflection
,您可以访问名称为Name
的项目的属性。
要测试IEnumerable,您可以使用typeof(IEnumerable).IsAssignableFrom(prop.PropertyType)
或type.GetGenericTypeDefinition() == typeof(IEnumerable<>)
。
编辑:
在GetValue
中你应该把实例放在不是类型:
var ItemsPropertyValue = ItemsProperty.GetValue(MyObjj, null);