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/