你能解释一下T: class, new()在下一行代码中是什么意思吗?

void Add<T>(T item) where T : class, new();

当前回答

它被称为泛型参数T上的“约束”。这意味着T必须是一个引用类型(一个类),并且它必须有一个公共默认构造函数。

其他回答

这是泛型机制的一部分,其中where关键字为必须实现的类型添加约束,以便用作类型参数。

这意味着类型T必须是一个类,并且有一个不接受任何参数的构造函数。

例如,你必须能够这样做:

T t = new T();

“Where”后面的是对你声明的泛型类型T的约束,所以:

class意味着T应该是一个类,而不是值类型或结构。 new()表示T类应该定义一个没有公共形参的默认构造函数。

它被称为泛型参数T上的“约束”。这意味着T必须是一个引用类型(一个类),并且它必须有一个公共默认构造函数。

where T: struct

type参数必须是值类型。可以指定除Nullable以外的任何值类型。更多信息请参见使用可空类型(c#编程指南)。

T:类

类型参数必须是引用类型,包括任何类、接口、委托或数组类型。(见下文附注)

其中T: new() 类型参数必须有一个公共的无参数构造函数。当与其他约束一起使用时,new()约束必须在最后指定。

其中T:[基类名]

类型参数必须是或派生自指定的基类。

其中T:[接口名]

类型参数必须是或实现指定的接口。可以指定多个接口约束。约束接口也可以是通用的。

其中T: U

为T提供的类型参数必须是为u提供的类型参数,或者派生自u的类型参数。这被称为裸类型约束。

(原始来源:https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters)