我有一个使用反射创建的对象列表,它们都是相同的类型,但是在编译时类型是未知的。
我试图找出将此列表(也使用反射)分配给可以是任何IEnumerable的对象属性的最佳方法。
List<object>
ArrayList
Custom : List<object>
我唯一的方法是假设属性是一个 ICollection 然后循环遍历 IEnumerable 并添加每个项目。(见下文,list
IEnumerable 源在哪里,key
是对象属性的字符串名称,result
是对象本身)
foreach (object item in list) {
PropertyInfo prop = result.GetType().GetProperty(key);
var collection = prop.GetValue(result, null);
Type collectionType = collection.GetType();
MethodInfo add = collectionType.GetMethod("Add", BindingFlags.Public | BindingFlags.Instance);
add.Invoke(collection, new object[] { item });
}