这些方法签名有什么区别?
public void T MyMethod<T>(T parameter)
和
public void T MyMethod<T>(T parameter) where T : class
他们似乎有相同的结果......那么where T : class
做了什么?
答案 0 :(得分:10)
在第二种方法中,T只能是一个类,不能是结构类型。
请参阅Constraints on Type Parameters (C# Programming Guide):
其中T:class
type参数必须是引用[class] type ;这也适用于任何类,接口,委托或数组类型。
答案 1 :(得分:5)
在第一个中你可以用非ref类型调用它,例如
MyMethod<int>(10);
不适用于第二个版本,因为它只接受ref类型!
答案 2 :(得分:1)
没有区别,但T仅限于参考类型。 它们仅在编译时有所不同,因为编译器检查T是否为ref-type。
答案 3 :(得分:1)
void
或T
。 MyMethod(1)
,因为它需要T
的引用类型