c# - 为什么在复制时我的 Collection<T> 与 List<T> 类的工作方式不同?

标签 c# generic-collections

我想复制一个集合并将新元素添加到其中一个(而不是两个)。

在下面的代码示例中,我通过创建一个 并将其传递给构造函数来复制集合。之后,我只在其中一个集合中添加了一个元素。之后两个集合都包含新元素...

var listOne = new Collection<Test>();

listOne.Add(new Test());
listOne.Add(new Test());

var listTwo = new Collection<Test>(listOne);

listOne.Add(new Test());

Console.WriteLine(listOne.Count); // 3
Console.WriteLine(listTwo.Count); // 3 (NOT OK)

当我使用列表而不是集合时,它按预期工作。

var listOne = new List<Test>();

listOne.Add(new Test());
listOne.Add(new Test());

var listTwo = new List<Test>(listOne);

listOne.Add(new Test());

Console.WriteLine(listOne.Count); // 3
Console.WriteLine(listTwo.Count); // 2 (OK)

在这两种情况下,我都希望第二个列表只包含 2 个元素。为什么集合和列表之间存在差异?

最佳答案

因为 Collection<T>List<T>在他们的构造函数中做不同的事情

Collection constructor

Initializes a new instance of the Collection class as a wrapper for the specified list.

List constructor

Initializes a new instance of the List class that contains elements copied from the specified collection [...]

关于c# - 为什么在复制时我的 Collection<T> 与 List<T> 类的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921483/

相关文章:

c# - 如何使用多个 GridView ItemTemplate (WinRT/XAML)

c# - 使用 Cache.Add 时,如果键已经存在或它是否静默失败,是否会抛出异常?

c# - 无法在通用集合中更改结构的成员值

java - 将父对象添加到 List<?扩展父级> - Java

c# - 使用扩展方法 (EF5) 恢复 DbContext.Detach() 方法

c# - 如何使用派生类的值填充文本框? C#

.net - Stack<T> 实现 ICollection,但具有来自 ICollection<T> 的方法

c# - 将旧版 .NET 集合迁移到其通用对应集合

c# - 取出除最后一个满足条件的所有项目?

c# - 我怎样才能防止asp :RadioButtonList from rendering a HTML-Table?