c#Linq’s – GroupedEnumerable用法?

Fruit[] data = new[] { new Fruit {Name = "Gala",Type = "Apple",Price = 0.75m,Quantity = 10}, new Fruit {Name = "Granny Smith",Type = "Apple",Price = 0.80m,Quantity = 7}, new Fruit {Name = "Tasty",Type = "Strawberries",Price = 1.90m,Quantity = 20} }; var grouped = from fruit in data group fruit by fruit.Type; 

grouped类型是: System.Linq.GroupedEnumerable

看看它: 在此处输入图像描述

我的问题 :

如果分组包含项目(实现可发生的) – 为什么它的类型是GroupedEnumerable

不是

 IEnumerable <System.Linq.IGrouping> 

为什么他们创建了一个新的Type GroupedEnumerable

如果.Net中有一个对象 ,它必须是某种具体类型,它不能是一个接口。 因此,例如, new IList()无效,您必须执行类似new List()

如果你有一个变量 ,它的类型可以是一个接口,所以你可以编写,例如, IList list = new List()

而这正是这里发生的事情。 grouped 变量的类型是IEnumerable> (虽然从代码中不清楚,因为你使用的是var )。 该变量引用的对象类型是GroupedEnumerable ,它是GroupBy()实现使用的内部类型。 它不能是IEnumerable ,因为你不能拥有一个接口的实例。

Visual Studio调试器向您显示对象的运行时类型,因为这是调试器的用途:向您显示运行时信息。