C# Linq是否根据实际收集类型优化执行?
Linq to对象适用于任何IEnumerable对象。变量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
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);