Linq to objects 适用于任何 IEnumerable 对象。变量
string[] foo = new string[] { };
和
var bar = new List<string>();
都是IEnumerable<string>
, 但如果我想知道每个人有多少元素,我可以使用 Length
数组上的属性和 Count
list 上的属性(property)。或者我可以使用 Count
来自 Linq 的方法,这对两者都适用。
问题是:Linq 是否提供某种优化,例如为每个方法实现不同的算法,根据被查询对象的实际类型调用一个或另一个?
我想象的是这样的:
if (obj is Array<T>)
DoSomethingForArray(obj as Array<T>);
else if (obj is List<T>)
DoSomethingForList(obj as List<T>);
else if (obj is Collection<T>)
DoSomethingForCollection(obj as Collection<T>);
else
DoSomethingThatWorksForAnyIEnumerable(obj);
最佳答案
答案是:这取决于 - Linq 扩展方法 Count()
检查类型是否实现了 ICollection<T>
或 ICollection
并使用 Count
如果可能的话,它的属性,但它并没有针对所有可能的场景进行优化。
关于c# - Linq 是否根据实际集合类型优化执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13941140/