Нет, второй список не только для чтения, это все еще Список, сгенерированный из 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()
каждый элемент вместо ... но это будет по-прежнему не влияет на изменчивость нового списка и его членов.