リバース拡張メソッドを使用するコードがいくつかあります。
元のリストが逆にならないようにするために、元のプログラマーは GetRange を使用して新しいリストを作成しました。
dim a = New List(of Thing)
... fill in a
dim b = a.GetRange(0, a.count)
b.reverse()
おそらく、GetRange は常に新しいオブジェクトを作成することを保証します。これはToListにも当てはまりますか?
次に、次のように書くことができます。
dim a = New List(of Thing)
... fill in a
dim b = a.ToList()
b.reverse()
その利点は、 a の型が IEnumerable(of T) であり、それでも機能することです。
私はこれを自分でテストしましたが、b が新しいオブジェクトであることは常に真実でした。質問はこれです:
将来の実装が同じように動作することが保証されていますか、それともこの動作は実装の偶然ですか?
明らかな「最適化」は、元のオブジェクトがすでにリストである場合、元のオブジェクトへの参照を返すことです。これはもちろん、2 番目のバージョンが元のリストを逆にすることを意味します。