为什么除了 : new() 之外,我不能为类型参数指定构造函数限制

本文关键字:类型参数 不能 构造函数 new 之外 为什么 | 更新日期: 2023-09-27 18:32:45

我正在尝试创建一个接口' Something<T>并希望限制T拥有一个带有一个 int 参数的构造函数。我可以做一些像where : new().那为什么我不能让它where T : new(int)呢?

为什么除了 : new() 之外,我不能为类型参数指定构造函数限制

您可以通过将

T 的实例化延迟给用户来避免这一点。像这样:

class MyTCreator<TParam, T>
{
    private Func<TParam, T> generator;
    public MyTCreator(Func<TParam, T> generator)
    {
        this.generator=generator;
    }
    public T CreateT(TParam param)
    {
        return generator(param);
    }
}

并像这样使用你的类:

var creator = new MyTCreator<long, DateTime>(ticks => new DateTime(ticks));
DateTime dt = creator.CreateT(12345L);