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