6

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

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

var bar = new List<string>();

两者都是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);
4

1 回答 1

11

答案是:视情况而定——Linq 扩展方法Count()检查该类型是否实现ICollection<T>ICollection使用该类型的Count属性(如果可能),但它并未针对每种可能的情况进行优化。

于 2012-12-18T20:42:44.983 回答