使用Type对象而不是T </t>创建List <t>

时间:2013-08-26 18:27:00

标签: c# generics

我有一个名为LazyLoader&lt; T&gt;的对象。它连接到ORM以在需要时加载T类型的数据。它有效。

LazyLoader&LT; T&GT;继承自ILazyLoader。

挑战:创建一个可以从Object类型加载Generic类型的工厂类。

如同,

public ILazyLoader CreateLazyLoader(int id, Type typeToLoad)
{
    return new LazyListLoader<typeToLoad>(id);
}

问题:&lt; typeToLoad&gt;不接受Type对象。如何转换Type&lt; typeToLoad&gt;进入像&lt; T&gt;这样的东西其中T是typeToLoad?

2 个答案:

答案 0 :(得分:9)

var llType = typeof(LazyListLoader<>).MakeGenericType(typeToLoad);
return (ILazyLoader)Activator.CreateInstance(llType, id);

答案 1 :(得分:4)

尝试以下

var unboundType = typeof(LazyListLoader<>);
var boundType = unboundType.MakeGenericType(typeToLoad);
return (ILazyLoader)Activator.CreateInstance(boundType, new[] {id});