C#泛型无效的原因

use*_*546 1 c# generics

我从Jon Skeet的"C#深度"中得到了这个.

他提到以下内容是有效的

(1) class Sample<T> where T:class,Stream
Run Code Online (Sandbox Code Playgroud)

以下是无效的

(2) class Sample<T> where T:Stream,class
Run Code Online (Sandbox Code Playgroud)

第二个无效的原因是什么?

CMS*_*CMS 9

我认为value()或reference()的类型约束必须在第一位,就像约束必须是最后一个,如果它们多于一个.structclassnew

此外,约束本身没有多大意义,Stream是一个类,只是通过该约束T将是一个引用类型(class),所以基本上它是多余的.


Han*_*ant 6

它在C#语言规范第10.1.5章中提到:

where子句中给出的约束列表可以按以下顺序包括以下任何组件:单个主要约束,一个或多个次要约束以及构造函数约束new().主要约束可以是类类型或引用类型约束类或值类型约束结构.辅助约束可以是类型参数或接口类型.

我加粗了相关的短语.