c# - Linq 是否根据实际集合类型优化执行?

标签 c# .net linq

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/

相关文章:

c# - 使用 linq 对嵌套列表进行分组

linq - 是否有对 linq where 表达式的 ODATA 查询(ODATA 到 Linq)

c# - 无法将 CommandTimeout 设置为超过 90 秒

c# - VisualStyleRenderer 到位图

c# - 在 C# 中以 O(log n) 最坏情况搜索数组中的特定字符串

c# - 文本框中仅允许字母数字

c# - 使用 Linq 从与另一个子列表匹配的子列表中删除项目

c# - 在 .NET Web 服务上使用/生成 ArrayOfInt 的 int[] insted 方法签名

c# - 如何在 Autofac 上注册单例

c# - 如何将emgu图像转换为XNA Texture2D?