结合struct和new()泛型类型约束

Ric*_*lly 6 c# generics c#-4.0

最近有理由细读可空文件,我注意到,可为空的定义是这样的:

public struct Nullable<T> where T : struct, new()
Run Code Online (Sandbox Code Playgroud)

我是(错误的)理解结构总是有一个公共无参数构造函数,如果这是正确的,new()类型约束在这里添加了什么?

par*_*mar 3

对于 struct new 来说没有意义。对于课程来说确实如此。

在你的情况下,这是多余的。

public T FactoryCreateInstance<T>() where T : new()
{
return new T();
}
Run Code Online (Sandbox Code Playgroud)

在上述情况下指定新约束是有意义的,但当它已经被约束为结构体时则不然。

值类型的无参数构造函数是 C# 限制,而不是 CLI 限制。也许这就是为什么它被多余地指定,为未来留下一些回旋余地。