一、引用类型约束
class Sample<T> where T : class类型实参可以是:
任何类: Sample<string>
接口: Sample<IDisposable>
数组: Sample<int[]>
委托: Sample<Action>
二、值类型约束
class Sample<T> where T : struct类型实参可以是:
值类型: Sample<int>
枚举: Sample<Enum>
三、构造函数类型约束
class Sample<T> where T : new()它检查类型实参是否有一个可用于创建类型实参的无参构造函数(这适用于所有值类型)
四、转换类型约束
有一点要注意,约束类不能是System.ValueType或者密封类或者结构体
五、组合约束