使用反射延迟初始化对象

时间:2015-07-03 05:33:10

标签: c# lazy-initialization

我想做下面调用的懒惰初始化。我在构造对象时知道T的类型。

T facade = (T)Activator.CreateInstance(typeof(T), param);

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:3)

您可以继承Lazy<T>,如下所示:

public class LazyActivator<T> : Lazy<T>
{
    public LazyActivator(params object[] args) : base(() => (T)Activator.CreateInstance(typeof(T), args))
    {
    }
}

然后:

LazyActivator<List<int>> lazyList = new LazyActivator<List<int>>(5);

如果您需要List<int>(有Capacity == 5

List<int> list = lazyList.Value;