【问题标题】:Generic Method Fails to Utilize Covariance on IEnumerable<T>通用方法无法在 IEnumerable<T> 上利用协方差
【发布时间】:2015-07-07 21:29:38
【问题描述】:

我想知道为什么下面的代码编译失败,除了“Instance argument: cannot convert from 'System.Collections.Generic.IEnumerable' to 'System.Collections.Generic.IEnumerable'":

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

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

【问题讨论】:

    标签: c# linq generics covariance


    【解决方案1】:

    Variance 仅适用于类。

    class, 添加到您的约束中。

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多