gpt4 book ai didi

c# - List 如何使用 ReadOnly 列表复制构造函数?

转载 作者:行者123 更新时间:2023-11-30 20:11:00 25 4
gpt4 key购买 nike

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?

最佳答案

不,第二个列表不是只读的,它仍然是一个从 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>传递给构造函数的是不是 ICollection<T> , 它会遍历集合和 .Add() 每个成员代替......但它仍然不会对新列表及其成员的可变性产生影响。

关于c# - List<T> 如何使用 ReadOnly 列表复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4358151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com