web-dev-qa-db-ja.com

.NET 4.0の読み取り専用リストまたは変更不可能なリスト

私の知る限り、.NET 4.0にはまだ読み取り専用リストがありません。フレームワークにまだこの機能がないのはなぜですか?これは domain-driven design の最も一般的な機能の1つではありませんか?

Javaが持っている数少ない利点の1つは、これが Collections.unmodifiablelist(list) メソッドの形式であり、IList <Tではかなり遅れているようです>またはList <T>。

IEnumerable<T>を使用することが質問に対する最も簡単な解決策です-ToListを使用してコピーを返します。

97
Chris S

ReadOnlyCollection を探しています。これは.NET2以来存在していました。

IList<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = new ReadOnlyCollection<string>(foo);

または

List<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = foo.AsReadOnly();

これにより、読み取り専用viewが作成され、ラップされたコレクションに加えられた変更が反映されます。

141
LukeH

ReadOnlyCollection はフレームワーク内に既にありますか?

13
Jason Watts

リストの最も一般的なパターンがすべての要素を反復する場合、IEnumerable<T>またはIQueryable<T>は、読み取り専用リストとしても効果的に機能します。

11
Ana Betts

インターフェイスを使用したい場合:.NET 4.5は、たとえばList<T>によって実装される汎用 IReadOnlyList インターフェイスを追加します。

IReadOnlyCollection に似ており、Itemインデクサープロパティを追加します。

11
Martin

2.0では、AsReadOnlyを呼び出してリストの読み取り専用バージョンを取得できます。または、既存のIListReadOnlyCollection<T>オブジェクトにラップします。

8
Paul Alexander

System.Collections.ObjectModel.ReadOnlyCollection の何が問題になっていますか?

7
Matthew Dresser