因为java的泛型实际都转成了object类型,而C#则是<>中的类型。
java的泛型是java编译器的一个feature(特性),java的泛型采用的是 擦触发 来实现的,实际上他在编译器编译的时候都转换成object类型的。而C#的泛型是类型安全的,他是从CLR层面进行支持泛型的,和java实现的泛型不是一个层面的。
C#的泛型是真正的泛型,是CLR支持的泛型。而Java的泛型使用了TypeErasure,是语法糖,属于伪泛型,JVM是不支持泛型的。
如果是使用通配符来限定类型对象的继承关系,在C#中可以使用where语句。如果是想实现继承关系,如A:B,那么List<A>:List<? extends B>这种关系,那么C#确实没有类似的语法支持。
C#的泛型是真正的泛型,是CLR支持的泛型。而Java的泛型使用了TypeErasure,是语法糖,属于伪泛型,JVM是不支持泛型的。
详细可以看老赵的博文:http://www.cnblogs.com/JeffreyZhao/archive/2010/02/22/why-not-csharp-on-jvm-type-erasure.html