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?
War es hilfreich?

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

scroll top