我有一个带有属性的对象。一些属性是通用列表。例如IList<IArticle>
或IList<IProduct>
,依此类推。
我使用myObject.GetType().GetProperties()
遍历对象中的所有属性,并搜索IList类型的属性。
我可以识别IList属性,并希望遍历列表。但是我有问题。我不能将listProperty(属于object类型)转换为通用列表。问题在于属性是不同的泛型类型。强制转换为IList仅适用于类型为IList<IArticle>
的属性,而不适用于其他类型的IList<IProdukt>
...
投射到IList<object>
始终为空。
这是示例代码:
foreach (var myProperty in myObject.GetType().GetProperties())
{
//get generic property (type IList)
if (myProperty.PropertyType.IsGenericType)
{
PropertyInfo propInfo = myObject.GetType().GetProperty(myProperty.Name);
Type propType = myObject.GetType().GetProperty(myProperty.Name).PropertyType;
var listProperty = propInfo.GetValue(myProperty);
foreach (var test in (listProperty as IList<???>))
{
//Do some magic
}
}
}
答案 0 :(得分:0)
这是遍历列表的解决方案。只需强制转换为IEnumerable
。
不要忘记包含using System.Collections;
。
foreach (var myProperty in myObject.GetType().GetProperties())
{
//get generic property (type IList)
if (myProperty.PropertyType.IsGenericType)
{
var listProperty = myProperty.GetValue(myObject) as IEnumerable;
foreach (var test in listProperty)
{
//Do some magic
}
}
}