2010-12-05 10 views

答えて

6

いいえ、第二のリストは読み取り専用ではありませんが、それはまだ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()ですが、新しいリストとそのメンバの変更可能性には影響しません。

関連する問題