0

我有一个名为 LazyLoader<T> 的对象。它连接到 ORM 以在需要时为 T 类型加载数据。有用。

LazyLoader<T> 继承自 ILazyLoader。

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

如中,

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

问题:<typeToLoad> 不接受 Type 对象。如何将类型 <typeToLoad> 转换为类似于 <T> 的东西,其中 T 是 typeToLoad?

4

2 回答 2

8
var llType = typeof(LazyListLoader<>).MakeGenericType(typeToLoad);
return (ILazyLoader)Activator.CreateInstance(llType, id);
于 2013-08-26T18:28:57.193 回答
3

尝试以下

var unboundType = typeof(LazyListLoader<>);
var boundType = unboundType.MakeGenericType(typeToLoad);
return (ILazyLoader)Activator.CreateInstance(boundType, new[] {id});
于 2013-08-26T18:29:18.487 回答