通用方法无法在 IEnumerable<T> 上利用协方差

Generic Method Fails to Utilize Covariance on IEnumerable<T>

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

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

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

差异仅适用于 类。

class, 添加到您的约束中。

Demo