Linq to objects可以在任何IEnumerable对象上运行.变量
string[] foo = new string[] { };
Run Code Online (Sandbox Code Playgroud)
和
var bar = new List<string>();
Run Code Online (Sandbox Code Playgroud)
两者都是IEnumerable<string>,但如果我想知道每个人有多少项,我可以使用列表Length上的数组和Count属性的属性.或者我可以使用CountLinq中的方法,这对两者都有效.
问题是: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);
Run Code Online (Sandbox Code Playgroud)
Bri*_*sen 11
答案是:它取决于 - Linq扩展方法Count()检查类型是否实现ICollection<T>或者如果可能的话ICollection使用它的Count属性,但它不会针对每种可能的方案进行优化.
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |