使用分析器,我发现在.Last()
的实现上调用Linq扩展方法IReadOnlyList
时,将调用GetEnumerator()
和MoveNext()
,直到结束集合而不是使用具有O(1)复杂性的索引。
对于IList
,没有这样的问题,因为扩展方法使用可用索引(参见反射器代码here)。
似乎需要更新Linq才能像IReadOnlyList
一样有效地支持IList
。
同时,实现O(1)复杂性的唯一方法是确保在我的类中显式实现Last()
,以便不使用Linq扩展方法。