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?
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?
いいえ、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()
各メンバーを反復処理しますが、新しいリストとそのメンバーの可変性には影響しません。