2010-12-05 1 views

ответ

6

Нет, второй список не только для чтения, это еще список генерируется из IEnumerable<T> (в частности ICollection<T> здесь). Метод .AsReadOnly() просто дает ReadOnlyCollection<MyObject>, но мы не изменяем , что коллекции, когда возились со вторым списком.

Вместо этого, вы создали новый List<MyObject> с его членами, является редактируемые (через List<T>(IEnumerable<T>) конструктор). Это генерирует, как и любой другой источник IEnumerable<T>, который является ICollection<T>, он выполняет .CopyTo() под ним.

В случае ReadOnlyCollection<T> (который реализует ICollection<T>), это вызывающий .CopyTo() на оригинальный IList<T> под что он был из, так что в основном то, что у вас есть такой же, как:

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

.... что касается второго списка. В других случаях, когда IEnumerable<T>, переданный конструктору, равен , а не a ICollection<T>, он будет перебирать по коллекции и .Add() каждого члена вместо этого ... но это все равно не повлияет на изменчивость нового списка и его членов.

Смежные вопросы