Wie funktioniert List kopieren Konstruktorfunktion mit Readonly-Listen?
-
08-10-2019 - |
Frage
Der MSDN-Artikel ist nicht wirklich das erklären.
List<MyObject> FirstList = new List<MyObject>();
// Add items to FirstList.
List<MyObject> SecondList = new List<MyObject>(FirstList.AsReadOnly());
// Is SecondList a read-only collection?
Lösung
Nein, die zweite Liste nicht schreibgeschützt ist, es ist immer noch eine Liste erzeugt aus einem ICollection<T>
hier). Die .AsReadOnly()
Methode gibt nur eine ReadOnlyCollection<MyObject>
, aber wir sind nicht modifizieren , die Sammlung, wenn sie mit der zweiten Liste durcheinander.
Stattdessen haben Sie eine neue List<MyObject>
mit seinen Mitgliedern erstellt, dass is editierbar (über die List<T>(IEnumerable<T>)
Konstruktor). Dies schließt die Erzeugung wie jede andere IEnumerable<T>
Quelle, die ein ICollection<T>
ist, es führt eine .CopyTo()
darunter.
Im Falle eines ReadOnlyCollection<T>
(welche Geräte ICollection<T>
), es ruft .CopyTo()
auf dem ursprünglichen IList<T>
unter, dass es aus, so dass im Grunde war das, was Sie haben, ist die gleiche wie:
List<MyObject> FirstList = new List<MyObject>();
// Add items to FirstList.
List<MyObject> SecondList = new List<MyObject>(FirstList);
.... so weit wie die zweite Liste betrifft. In anderen Fällen, in denen die IEnumerable<T>
an den Konstruktor übergeben wird, ist nicht ein ICollection<T>
, würde es die Sammlung iterieren und