2010-12-05 15 views

Antwort

6

Nein, die zweite Liste schreibgeschützt ist nicht, es ist immer noch eine Liste erzeugt von einem IEnumerable<T> (insbesondere ein ICollection<T> hier). Die .AsReadOnly() Methode gibt nur eine ReadOnlyCollection<MyObject>, aber wir ändern nicht , dass Sammlung beim Mischen mit der zweiten Liste.

Stattdessen haben Sie eine neue List<MyObject> mit seinen Mitgliedern erstellt, dass ist editierbar (über den List<T>(IEnumerable<T>) Konstruktor). Dies macht die Generation wie jede andere IEnumerable<T> Quelle, die eine ist, führt eine .CopyTo() darunter.

Im Falle eines ReadOnlyCollection<T> (die ICollection<T> implementiert), es .CopyTo() auf dem ursprünglichen IList<T> unter Berufung dass es aus, war also im Grunde, was Sie haben, ist die gleiche wie:

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

.... soweit es die zweite Liste betrifft. In anderen Fällen, in denen IEnumerable<T> an den Konstruktor übergeben wird nicht a ICollection<T>, würde es über die Sammlung und .Add() jedes Mitglied stattdessen iterieren ... aber es hätte immer noch keinen Einfluss auf die Änderbarkeit der neuen Liste und ihrer Mitglieder.