使用reflection创建通用List

我有一个属性IEnumerable 。 如何创建一个创建新List并分配该属性的generics方法?

 IList list = property.PropertyType.GetGenericTypeDefinition() .MakeGenericType(property.PropertyType.GetGenericArguments()) .GetConstructor(Type.EmptyTypes); 

我不知道T型在哪里可以是任何东西

假设您知道属性名称,并且您知道它是IEnumerable那么此函数会将其设置为相应类型的列表:

 public void AssignListProperty(Object obj, String propName) { var prop = obj.GetType().GetProperty(propName); var listType = typeof(List<>); var genericArgs = prop.PropertyType.GetGenericArguments(); var concreteType = listType.MakeGenericType(genericArgs); var newList = Activator.CreateInstance(concreteType); prop.SetValue(obj, newList); } 

请注意,此方法不进行类型检查或error handling。 我将其作为练习留给用户。

 using System; using System.Collections.Generic; namespace ConsoleApplication16 { class Program { static IEnumerable Func() { yield return 1; yield return 2; yield return 3; } static List MakeList() { return (List)Activator.CreateInstance(typeof(List), Func()); } static void Main(string[] args) { foreach(int i in MakeList()) { Console.WriteLine(i); } } } }