C# 为什么可以';t我返回一个IEnumerable<;i分组<;A、 B>&燃气轮机;作为一个IEnumerable<;IEnumerable<;B>&燃气轮机;

C# 为什么可以';t我返回一个IEnumerable<;i分组<;A、 B>&燃气轮机;作为一个IEnumerable<;IEnumerable<;B>&燃气轮机;,c#,linq,ienumerable,igrouping,C#,Linq,Ienumerable,Igrouping,我使用了GroupBy(),并生成了一个IEnumerable 我可以对它进行遍历,并将每个元素(每个I分组)传递到一个接受IEnumerable 这并不奇怪-i分组implementsIEnumerable 但是,如果我定义了一个接受IEnumerable的方法,那么我就不能直接传入GroupBy()的输出,即使它是IEnumerable并且其中的每个元素都是IEnumerable 为什么?正如一些人所指出的(事实上,正如我在后脑勺中所知道的那样),这只是一个协方差问题,只会在.NET 4之前

我使用了
GroupBy()
,并生成了一个
IEnumerable

我可以对它进行遍历,并将每个元素(每个
I分组
)传递到一个接受
IEnumerable

这并不奇怪-
i分组
implements
IEnumerable

但是,如果我定义了一个接受
IEnumerable
的方法,那么我就不能直接传入
GroupBy()
的输出,即使它是
IEnumerable
并且其中的每个元素都是
IEnumerable


为什么?

正如一些人所指出的(事实上,正如我在后脑勺中所知道的那样),这只是一个协方差问题,只会在.NET 4之前的环境中中断。

它对我有效。发布确切的方法签名以及如何调用它。我猜你的
B
TValue
不匹配
IEnumerable
是协变的,所以它应该可以工作。见此。协方差/反方差被引入C#4。因此,如果您在VS2008中编译,这将不起作用。啊,是的,我是根据.NET 3.5编译的,我隐约知道协方差与此相关,但我认为在C#4中添加的是在您自己的泛型类中控制它的能力,在此之前没有意识到框架类也不能做到这一点。谢谢@Aron或Brondahl回答这个问题,使之成为一个恰当的问题。