Linq to objects可以在任何IEnumerable对象上运行.变量
string[] foo = new string[] { };
和
var bar = new List<string>();
是IEnumerable< string>,但是如果我想知道它们中的每一个有多少项,我可以在数组上使用Length属性,在列表上使用Count属性.或者我可以使用Linq的Count方法,这将适用于两者.
问题是: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);