为什么在 C# 中没有带参数的构造函数约束泛型参数

本文关键字:参数 构造函数 约束 泛型 为什么 | 更新日期: 2023-09-27 18:30:46

众所周知,我们不能在当前版本的C#中编写这样的代码:

public class A {
    public static void Method<T> () where T : new(string, string) {
        var x = new T("foo", "bar");
    }
}

但是我们可以使用new()约束来强制T具有公共无参数构造函数,然后我们能够使用new T()表达式创建新的T实例。

SO上有很多关于各种解决方法的答案,但没有一个解释为什么语言设计者没有实现这样的功能。从 SO 上的问题数量来看,它似乎在阅读世界应用程序中很有用。

为什么这个功能没有在 C# 中实现,是否有可能将其添加到该语言的下一个版本中?

为什么在 C# 中没有带参数的构造函数约束泛型参数

根据 github 上的此功能请求链接,原因是 CLR 没有提供 C# 实现它所需的信息。

有人猜测可能会修改 CLR,以便将来的 C# 版本 (7.0?) 支持此功能。