这不应该是有效的C#代码吗?
class A<T> where T : class {
public void DoWork<K>() where K : T {
var b = new B<K>(); // <- compile time error
}
}
class B<U> where U : class {
}
编译器报错如下:
error CS0452: 必须将类型 'K' 作为引用类型,才能在泛型类型或方法 'ConsoleApplication1.B' 的参数 'U' 中使用它。
编译器难道不能推断出K被限制为类型T或派生自T,因此它显然应该是一个引用类型(T被限制为引用类型)吗?