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



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

public void T MyMethod<T>(T parameter)

public void T MyMethod<T>(T parameter) where T : class

他们似乎有同样的结果。。。那么where T : class是做什么的呢?

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

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

其中T:类

类型参数必须是引用[class]类型;这也适用于任何类、接口、委托或数组类型。

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

MyMethod<int>(10);

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

没有区别,但T仅限于引用类型。它们只在编译时不同,因为编译器会检查T是否是ref类型。

  1. 两者都无法编译。您应该使用voidT
  2. 第二种方法不适用于MyMethod(1),因为它需要对T的引用类型

最新更新