私の知る限り、.NET 4.0にはまだ読み取り専用リストがありません。フレームワークにまだこの機能がないのはなぜですか?これは domain-driven design の最も一般的な機能の1つではありませんか?
Javaが持っている数少ない利点の1つは、これが Collections.unmodifiablelist(list) メソッドの形式であり、IList <Tではかなり遅れているようです>またはList <T>。
IEnumerable<T>
を使用することが質問に対する最も簡単な解決策です-ToList
を使用してコピーを返します。
ReadOnlyCollection
を探しています。これは.NET2以来存在していました。
IList<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = new ReadOnlyCollection<string>(foo);
または
List<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = foo.AsReadOnly();
これにより、読み取り専用viewが作成され、ラップされたコレクションに加えられた変更が反映されます。
ReadOnlyCollection はフレームワーク内に既にありますか?
リストの最も一般的なパターンがすべての要素を反復する場合、IEnumerable<T>
またはIQueryable<T>
は、読み取り専用リストとしても効果的に機能します。
インターフェイスを使用したい場合:.NET 4.5は、たとえばList<T>
によって実装される汎用 IReadOnlyList
インターフェイスを追加します。
IReadOnlyCollection
に似ており、Item
インデクサープロパティを追加します。
2.0では、AsReadOnly
を呼び出してリストの読み取り専用バージョンを取得できます。または、既存のIList
をReadOnlyCollection<T>
オブジェクトにラップします。
System.Collections.ObjectModel.ReadOnlyCollection の何が問題になっていますか?