我想知道为什么以下代码无法编译,但例外:“实例参数:无法从'System.Collections.Generic.IEnumerable '转换为'System.Collections.Generic.IEnumerable '”:

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


我知道我可以将返回行改为input.Cast<TInterface>().ToList(),但想了解为什么编写的代码无法编译。在我看来,似乎编译器应该能够验证输入是否可以隐式转换为IEnumerable 。

最佳答案

方差仅适用于类。

class,添加到您的约束中。

Demo

07-28 00:59