いいえ、第二のリストは読み取り専用ではありませんが、それはまだIEnumerable<T>
(ここでは、具体的ICollection<T>
)から生成されたリストです。 .AsReadOnly()
メソッドはReadOnlyCollection<MyObject>
を返しますが、そのコレクションを2番目のリストと混同しないように変更していません。
代わりにが(List<T>(IEnumerable<T>)
コンストラクタ経由)のメンバーである新しいList<MyObject>
を作成しました。これは他のIEnumerable<T>
ソースのような世代をICollection<T>
とし、その下に.CopyTo()
を実行します。
(ICollection<T>
を実装)ReadOnlyCollection<T>
の場合はそれからだったその下に、それが元IList<T>
に.CopyTo()
を呼び出しているので、基本的に何を持っていることと同じです。
List<MyObject> FirstList = new List<MyObject>();
// Add items to FirstList.
List<MyObject> SecondList = new List<MyObject>(FirstList);
.... 2番目のリストに関する限り。 IEnumerable<T>
がコンストラクタに渡された他の場合では、でなくであるICollection<T>
である場合は、コレクション全体を反復し、各メンバーは.Add()
ですが、新しいリストとそのメンバの変更可能性には影響しません。