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