多くの場合、コードは を受け取り、IEnumerable<T>
そこに含まれるアイテムのシーケンスを永続化します。これを行う一般的な方法は、それを呼び出すToList
ことです。ただし、問題の実装が既に不変リストである場合、ToList
それを呼び出すのは無駄です。
コード内でのみコレクションを渡している場合は、提供されたオブジェクトが既に実装されていない限り(実装している)IEnumerable<T>
のコンストラクターに を渡す拡張メソッドの使用を定義できます(その場合は、単純に次のように返されます-は)。そのようなクラスを実装するのは難しくありません。ただし、私の懸念は、そのようなクラスを自分で実装し、そのようなクラスを必要とする他のすべての人が同様に実装した場合、異なる「不変リスト」クラスを使用する人々によって記述されたコード間でオブジェクトが渡されるたびに、それが終了することです。防御的にコピーされる(以前の不変コピーの作成者が不変として認識しない形式に)。Supercat.ImmutableList<T>
Supercat.IImmutableList<out T>
Supercat.IImmutableList<T>
したがって、私は興味があります:アプローチにサブスクライブするすべてのオブジェクトが互いのスナップショットを不変として認識できるように、アイテムのシーケンスの不変のスナップショットを取得するための犯罪集団に近い何かを達成しているアプローチはありますか?リスト?たとえば、多くの人が不変クラスに特定の名前の関数を組み込んでいて、その名前が他の目的では使用されず、不変性を示す場合、同じアプローチを使用する他の人々のコードと効率的に相互運用可能なコードを作成するのはかなり簡単です。 (静的ジェネリック クラスとリフレクションを使用)。かなりの数の可能なアプローチを想像できますが、クリティカルマスに近いものは知りません. ソースからビルドできるパブリックドメインのものがいいと思います。