c#Linq's - GroupedEnumerable用法?

时间:2012-05-05 12:33:43

标签: c# linq .net-4.0 ienumerable

 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<ConsoleApplication15.Fruit,string,ConsoleApplication15.Fruit>

看看它:enter image description here

我的问题:

如果分组包含项目(实现不可数) - 为什么其类型为GroupedEnumerable

IEnumerable <System.Linq.IGrouping<string,ConsoleApplication15.Fruit>>

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

1 个答案:

答案 0 :(得分:7)

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

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

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

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