通用方法无法在IEnumerable <t>上使用协方差

时间:2015-07-07 21:29:39

标签: c# linq generics covariance

我想知道为什么以下代码无法编译,除了&#34; Instance参数:无法转换为&#39; System.Collections.Generic.IEnumerable&lt; TImpl&gt;&#39;到&#39; System.Collections.Generic.IEnumerable&lt; TInterface&gt;&#39; &#34;:

public static List<TInterface> Foo<TInterface, TImpl>(IEnumerable<TImpl> input)
    where TImpl : TInterface
{
    return input.ToList<TInterface>();
}

我知道我可以改为将返回行更改为input.Cast<TInterface>().ToList(),但是想要理解为什么编写的代码不会编译。在我看来,好像编译器应该能够验证输入是否可以隐式地转换为 IEnumerable&lt; TInterface&gt;

1 个答案:

答案 0 :(得分:4)

方差仅适用于课程。

class,添加到约束中。

Demo