Container <implementerofiinterface>不是Container <iinterface>。为什么不呢?</iinterface> </implementerofiinterface>

时间:2010-06-12 14:05:57

标签: c# inheritance interface

为什么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;
}

2 个答案:

答案 0 :(得分:4)

它与covariance有关。这是一个不错的博客post。如果您不使用4.0,则必须使用System.Linq Cast方法强制转换列表。

答案 1 :(得分:2)

这适用于Net 4.0: 公共界面IEnumerable&lt; out T&gt; :IEnumerable out 是逆变的