通用方法无法在 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,
添加到您的约束中。
我想知道为什么以下代码无法编译,除了“实例参数:无法从 '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,
添加到您的约束中。