我有一个属性的类IEnumerable<T>
我如何创建一个新的通用方法List<T>
并指定该属性?
IList list = property.PropertyType.GetGenericTypeDefinition()
.MakeGenericType(property.PropertyType.GetGenericArguments())
.GetConstructor(Type.EmptyTypes);
我不知道在哪里为T型可以是任何东西
我有一个属性的类IEnumerable<T>
我如何创建一个新的通用方法List<T>
并指定该属性?
IList list = property.PropertyType.GetGenericTypeDefinition()
.MakeGenericType(property.PropertyType.GetGenericArguments())
.GetConstructor(Type.EmptyTypes);
我不知道在哪里为T型可以是任何东西
假设你知道属性的名称,你知道这是一个IEnumerable<T>
那么这个功能将其设置为相应类型的列表:
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);
}
请注意,这种方法确实没有类型检查,或错误处理。 我将它作为一个练习给用户。
using System;
using System.Collections.Generic;
namespace ConsoleApplication16
{
class Program
{
static IEnumerable<int> Func()
{
yield return 1;
yield return 2;
yield return 3;
}
static List<int> MakeList()
{
return (List<int>)Activator.CreateInstance(typeof(List<int>), Func());
}
static void Main(string[] args)
{
foreach(int i in MakeList())
{
Console.WriteLine(i);
}
}
}
}