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.