Gif*_*guy 2 .net c# list readonly-collection
MSDN文章并没有真正解释这一点.
List<MyObject> FirstList = new List<MyObject>();
// Add items to FirstList.
List<MyObject> SecondList = new List<MyObject>(FirstList.AsReadOnly());
// Is SecondList a read-only collection?
Run Code Online (Sandbox Code Playgroud)
不,第二个列表不是只读的,它仍然是从IEnumerable<T>
(特别是ICollection<T>
在这里)生成的List .该.AsReadOnly()
方法只是给出了一个ReadOnlyCollection<MyObject>
,但是在弄乱第二个列表时我们不会修改该集合.
相反,您已经创建了一个新的List<MyObject>
,其成员是可编辑的(通过List<T>(IEnumerable<T>)
构造函数).这就像任何其他IEnumerable<T>
源一样生成ICollection<T>
它,它执行一个.CopyTo()
底层.
在a ReadOnlyCollection<T>
(实现ICollection<T>
)的情况下,它调用它来自.CopyTo()
的原始IList<T>
底层,所以基本上你拥有的是相同的:
List<MyObject> FirstList = new List<MyObject>();
// Add items to FirstList.
List<MyObject> SecondList = new List<MyObject>(FirstList);
Run Code Online (Sandbox Code Playgroud)
....就第二个清单而言.在其他情况下IEnumerable<T>
传递给构造是不是一个ICollection<T>
,它会遍历集合并.Add()
代替各成员......但它仍然对新的名单及其成员的可变性没有影响.