无论我用作输入的收集类型如何,LINQ总是返回IEnumerable<MyType>而不是List<MyType>或HashSet<MyType>。
从MSDN tutorial:
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
// numQuery is an IEnumerable<int> <====== Why IEnumerable<int> instead of int[]?
var numQuery =
from num in numbers
where (num % 2) == 0
select num;
我想知道不保留集合类型(如元素类型)而不是建议的解决方法的背后的理由是什么。
我知道
toArray,
toDictionary或
toList存在,这不是问题。
编辑:C#中的实现与Scala有什么不同,它在不覆盖各地返回类型的情况下可以工作?
请您参考如下方法:
简短的回答:C#的类型系统太原始了,无法支持在更高阶的函数中保留集合类型(即没有代码重复)。
长答案:请参阅我的帖子here。 (实际上,它是关于Java的,但也适用于C#。)
