我的通用类看起来像这样:
public interface IFoo<T> where T : class
{
IList<T> GetFoo();
}
public class Foo<T> : IFoo<T> where T : class
{
public IList<T> GetFoo()
{
//return something in here
}
}
我想从汇编类型集合中使用该类,如下所示:
public class Bar
{
public IList<string> GetTheFoo()
{
IList<Type> theClass = Assembly.GetExecutingAssembly().GetTypes()
.Where(t => t.IsClass).ToList();
var theList = new List<string>();
foreach (Type theType in theClass)
{
//not working...
theList.Add(new Foo<theType>().GetFoo() );
}
}
}
但编译器无法接受列表中的类型。 如何解决这个问题?
答案 0 :(得分:3)
您可以使用Type.MakeGenericType
动态创建所需类型:
var item = typeof(Foo<>).MakeGenericType(theType);
由于这些项目会有所不同,您只能将它们存储在List<object>
中。