什么是C#泛型方法中的"where T:class"?

Bip*_*Bip 7 c# generics

这些方法签名有什么区别?

public void T MyMethod<T>(T parameter)
Run Code Online (Sandbox Code Playgroud)

public void T MyMethod<T>(T parameter) where T : class
Run Code Online (Sandbox Code Playgroud)

他们似乎有相同的结果......那么做where T : class什么呢?

小智 10

在第二种方法中,T只能是一个类,不能是结构类型.

请参阅类型参数约束(C#编程指南):

哪里T:上课

type参数必须是reference [class]类型 ; 这也适用于任何类,接口,委托或数组类型.


Pet*_*ter 6

在第一个中,您可以使用非ref类型调用它

MyMethod<int>(10);
Run Code Online (Sandbox Code Playgroud)

这不适用于第二个版本,因为它只接受ref类型!