6

使用探查器,我发现在.Last(), 的实现上调用 Linq 扩展方法时IReadOnlyList,将一直调用到集合结束,而不是使用复杂度为 O(1) 的索引GetEnumerator()MoveNext()对于IList,不存在这样的问题,因为扩展方法使用了可用的索引(参见此处的反射器代码)。

看来 Linq 需要更新才能IReadOnlyListIList.

同时,实现 O(1) 复杂度的唯一方法是确保Last()在我的类中显式实现,以便不使用 Linq 扩展方法。

4

0 回答 0