Non, la deuxième liste est en lecture seule non, il est toujours une liste générée à partir d'un IEnumerable<T>
(spécifiquement un ICollection<T>
ici). La méthode .AsReadOnly()
donne simplement ReadOnlyCollection<MyObject>
, mais nous ne modifions pas cette collection lorsque vous jouez avec la deuxième liste.
Au lieu de cela, vous avez créé une nouvelle List<MyObject>
avec ses membres que est modifiable (via le constructeur List<T>(IEnumerable<T>)
). Cela fait la génération comme n'importe quelle autre IEnumerable<T>
source qui est un ICollection<T>
, il effectue un .CopyTo()
dessous.
Dans le cas d'un ReadOnlyCollection<T>
(qui met en œuvre ICollection<T>
), qu'il appelle .CopyTo()
sur la IList<T>
originale sous qu'il était de, donc en gros ce que vous avez est le même que:
List<MyObject> FirstList = new List<MyObject>();
// Add items to FirstList.
List<MyObject> SecondList = new List<MyObject>(FirstList);
.... en ce qui concerne la deuxième liste. Dans les autres cas où le IEnumerable<T>
passé au constructeur est pas un ICollection<T>
, il serait itérer sur la collection et .Add()
chaque membre à la place ... mais il n'aurait toujours pas d'impact sur la mutabilité de la nouvelle liste et de ses membres.