动态访问Type为IEnumerable <customclass> </customclass>的PropertyInfo

时间:2012-01-20 08:36:56

标签: c#

我得到了这个有效的代码:

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为“对象与目标类型不匹配”...

1 个答案:

答案 0 :(得分:1)

您可以测试属性为IEnumerable类型,然后在foreach循环中使用reflection,您可以访问名称为Name的项目的属性。

要测试IEnumerable,您可以使用typeof(IEnumerable).IsAssignableFrom(prop.PropertyType)type.GetGenericTypeDefinition() == typeof(IEnumerable<>)

编辑:

GetValue中你应该把实例放在不是类型:

var ItemsPropertyValue = ItemsProperty.GetValue(MyObjj, null);