.Last()
プロファイラーを使用して、の実装で Linq 拡張メソッドをIReadOnlyList
呼び出すと、O(1) の複雑さを持つインデックスを使用する代わりに、コレクションの最後まで呼び出されることがわかりましGetEnumerator()
たMoveNext()
。の場合IList
、拡張メソッドが使用可能なインデックスを使用するため、このような問題はありません (ここでリフレクター コードを参照)。
IReadOnlyList
と同じくらい効率的にサポートするには、Linq を更新する必要があるようIList
です。
当面の間、O(1) の複雑さを達成する唯一の方法Last()
は、Linq 拡張メソッドが使用されないように、クラスに明示的に実装することです。