参考在Visual Studio 2010 Express中为C#编译的这个测试代码
public class Test
{
class Base { }
class Derived : Base { }
void Test1(IEnumerable<Derived> derived)
{
IEnumerable<Base> b = derived; //This works fine using covariance on IEnumerable
}
void Test2<TDerived, TBase>(TDerived derived) where TDerived : TBase
{
TBase b = derived; //This works fine because TDerived is constrained to derive from TBase
}
void Test3<TDerived, TBase>(IEnumerable<TDerived> derived) where TDerived : TBase
{
IEnumerable<TBase> b = derived; //ERROR: paraphrased: Cannot implicitly convert type IEnumerable<TDerived> to …Run Code Online (Sandbox Code Playgroud)