2

MSDNの記事では、これについて実際には説明されていません。

List<MyObject> FirstList = new List<MyObject>();
// Add items to FirstList.
List<MyObject> SecondList = new List<MyObject>(FirstList.AsReadOnly());
// Is SecondList a read-only collection?
4

1 に答える 1

7

いいえ、2番目のリストは読み取り専用ではありません。それでもIEnumerable<T>(具体的にはICollection<T>ここ)から生成されたリストです。この.AsReadOnly()メソッドは、を与えるだけですが、2番目のリストをいじるときにそのReadOnlyCollection<MyObject>コレクションを変更していません。

代わりに、 (コンストラクターを介して)編集可能なList<MyObject>メンバーを使用して新しいものを作成しました。List<T>(IEnumerable<T>)これは、他のIEnumerable<T>ソースと同じように生成ICollection<T>を行い、.CopyTo()その下で実行します。

ReadOnlyCollection<T>(を実装する)の場合、それは元の元ICollection<T>のものを呼び出しているので、基本的にあなたが持っているものは次のものと同じです:.CopyTo()IList<T>

List<MyObject> FirstList = new List<MyObject>();
// Add items to FirstList.
List<MyObject> SecondList = new List<MyObject>(FirstList);

....2番目のリストに関する限り。IEnumerable<T>コンストラクターに渡されるものがではない場合は、代わりにICollection<T>コレクションと.Add()各メンバーを反復処理しますが、新しいリストとそのメンバーの可変性には影響しません。

于 2010-12-05T09:28:58.873 に答える