106

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

Java が C# より優れている数少ない利点の 1 つは、これがCollections.unmodifiablelist(list)メソッドの形式であることです。

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

4

7 に答える 7

153

あなたが探しReadOnlyCollectionているのは、.NET2 から存在している です。

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

また

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

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

于 2009-06-11T22:19:58.807 に答える
13

既にフレームワーク内にあるReadOnlyCollectionはどうですか?

于 2009-06-11T22:17:45.393 に答える
11

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

于 2009-06-11T22:21:07.820 に答える
8

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

于 2009-06-11T22:16:21.717 に答える
7

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

于 2009-06-11T22:22:05.180 に答える
0

IEnumerable に拡張メソッド ToReadOnlyList() を作成し、次に

IEnumerable<int> ints = new int[] { 1, 2, 3 };
var intsReadOnly = ints.ToReadOnlyList();
//intsReadOnly [2]= 9; //compile error, readonly

拡張方法はこちら

public static class Utility
{
    public static IReadOnlyList<T> ToReadOnlyList<T>(this IEnumerable<T> items)
    {
        IReadOnlyList<T> rol = items.ToList();
        return rol;
    }
}

マーティンの答えも見てください

于 2021-04-15T22:12:38.143 に答える