为什么DoesntWork()
不能在下面工作?错误是:
Cannot implicitly convert type 'List' to 'IEnumerable'. An explicit conversion exists (are you missing a cast?)
。我知道这是关于我没有得到的通用/模板的东西,但List是IEnumerable而Implementer 是 IInterface。我不明白为什么需要这样做(或者如果它真的可以)。
public interface IInterface
{
// ...
}
public class Implementer : IInterface
{
// ...
}
IEnumerable<IInterface> DoesntWork()
{
List<Implementer> result = new List<Implementer>();
return result;
}
答案 0 :(得分:4)
它与covariance有关。这是一个不错的博客post。如果您不使用4.0,则必须使用System.Linq Cast方法强制转换列表。
答案 1 :(得分:2)
这适用于Net 4.0: 公共界面IEnumerable&lt; out T&gt; :IEnumerable out 是逆变的