创建列表<;T>;使用Type对象而不是T

本文关键字:对象 Type gt 列表 lt 创建 使用 | 更新日期: 2023-09-27 18:29:08

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

LazyLoader<T> 从ILazyLoader继承。

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

如中所示,

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

问题:<typeToLoad>不接受Type对象。如何转换类型<将ToLoad>键入到类似<T> 其中T是类型ToLoad?

创建列表<;T>;使用Type对象而不是T

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

尝试以下

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