これが可能かどうかはわかりませんが、基本的には、プロパティを公開するReadOnlyCollection<ReadOnlyCollection<MyType>>
クラス内の基になるコレクションを変更しながら、 type のプロパティを公開したいと考えています。さらに、クラスのユーザーが返されたコレクションへの参照を保持できるようにして、プロパティを公開するクラスで内部的に更新すると更新されるようにします。
たとえば、これが単一のコレクションである場合、次のようにすることができます。
public class MyClass {
private List<MyType> _List;
public ReadOnlyCollection<MyType> RList {
get {
return _List.AsReadOnly();
}
}
}
を実行することで、クラス内のリストにアイテムを追加することができ_List.Add()
ます。さらに、このクラスのクライアントが行う場合は、次のように言います。
var collectionRef = myClassInstance.RList;
次にcollectionRef
、要素をリストに追加すると、内部からも変更されMyClass
ます。
リストのリストが必要な場合、問題が発生します。
private List<List<MyType>> _List;
public ReadOnlyCollection<ReadOnlyCollection<MyType>> RList {
get {
return _List.AsReadOnly();
}
}
上記の試みの差し迫った問題はAsReadonly()
、外側のリストにのみ適用されることです。ReadOnlyCollection<List<MyItem>>
したがって、プロパティの宣言された型ではないa を返そうとします。宣言されたプロパティの型を満たすために私が考えることができる唯一の方法はReadOnlyCollection
、次のような方法で新しいを作成することです。
new ReadOnlyCollection<ReadOnlyCollection<MyItem>>(_List)
また
new ReadOnlyCollection<ReadOnlyCollection<MyItem>>() {
new ReadOnlyCollection<MyItem>(_List[0]),
new ReadOnlyCollection<MyItem>(_List[1]),
...
}
しかし、このネストされたコレクションを作成するための構文がどうなるかはわかりません。また、「新しい」コレクションを作成することで、プロパティによって返される値への参照を使用して、基になるリストへの変更を追跡できないかどうかもわかりません。つまり、私が内部MyClass
で行う場合_List[1].Add(myTypeInstance)
、読み取り専用バージョンへの参照を保持している誰かがその新しいアイテムを見るかどうかはわかりません。
私は正直に言って、他のアプローチにもオープンです。基本的には、読み取り専用であるがプロパティを公開するクラス内で変更できる項目のリストのリストを公開するだけで済み、クライアントはプロパティ アクセサーから値を再度取得することなく反映された変更を確認できます。