当返回类型为IEnumerable <entry>时,为什么我不能返回List <entry>?</entry> </entry>

时间:2010-10-17 22:38:10

标签: c# generics

我有:

interface IEntry {}

class Entry : IEntry {}

为什么我不能这样做?

IEnumerable<IEntry> func()
{
    return new List<Entry>();
}

返回的对象不满足所有类型要求吗?

2 个答案:

答案 0 :(得分:4)

我认为这只适用于.net 4

在早期版本中,您可以:

using System.Linq;

IEnumerable<IEntry> func()
{
    return new List<Entry>().Cast<IEntry>();
}

答案 1 :(得分:1)

C#(和.Net)4.0在泛型类型参数(包括covariance and contravariance)中引入了IEnumerable的概念,它允许编译器隐式转换这样的语句。

定义自己的泛型类型时,可以分别使用inout关键字将类型声明为协变或逆变。