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>
看看它:

我的问题 :

如果分组包含项目(实现 ienumerable ) - 为什么它的类型是 GroupedEnumerable
不是
IEnumerable <System.Linq.IGrouping<string,ConsoleApplication15.Fruit>>

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

最佳答案

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

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

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

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

关于c# Linq - GroupedEnumerable 的用法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10461882/

10-12 02:27