Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq是否根据实际收集类型优化执行?_C#_.net_Linq - Fatal编程技术网

C# Linq是否根据实际收集类型优化执行?

C# Linq是否根据实际收集类型优化执行?,c#,.net,linq,C#,.net,Linq,Linq to对象适用于任何IEnumerable对象。变量 string[] foo = new string[] { }; 及 答案是:这取决于-Linq扩展方法Count() 旁注:数组还实现了ICollection,因此它也有一个Count属性,您只需要相应地强制转换它。使用像ildasm这样的反汇编程序,您可以查看源代码。然后你会看到不同的优化。你说的是哪个Count()?调用的Count()方法不是根据调用它的对象的类型来确定吗?Brian正在谈论System.Linq.Enume

Linq to对象适用于任何IEnumerable对象。变量

string[] foo = new string[] { };


答案是:这取决于-Linq扩展方法
Count()

旁注:数组还实现了
ICollection
,因此它也有一个
Count
属性,您只需要相应地强制转换它。使用像ildasm这样的反汇编程序,您可以查看源代码。然后你会看到不同的优化。你说的是哪个Count()?调用的Count()方法不是根据调用它的对象的类型来确定吗?Brian正在谈论
System.Linq.Enumerable.Count(IEnumerable)
。更准确地说,
Count()
(当前)首先检查类型是否实现了
ICollection
ICollection
,如果是,则使用
Count
属性。否则它会在整个收藏中循环。@Steven:谢谢你提供的额外信息。我会更新答案。好的,我想澄清一下会有帮助。
var bar = new List<string>();
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);