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;

分组类型是:System.Linq.GroupedEnumerable< ConsoleApplication15.Fruit,string,ConsoleApplication15.Fruit>

看看它:

我的问题 :

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

并不是

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

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

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

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

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

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

转载注明原文:c#Linq’s – GroupedEnumerable用法? - 代码日志