【发布时间】:2020-05-23 10:12:18
【问题描述】:
所以我尝试创建一个虚假的项目列表
var items = new List<Item>();
var item = new Item
{
Name = "A";
}
for(int i=0; i<3; i++)
{
items.Add(item);
}
item.Name = "B";
for(int i = 0; i<2; i++)
{
items.Add(item);
}
我希望它会返回一个包含 3 个项目名称 A 和 2 个项目名称 B 的列表,但它返回 5 个项目名称 B。我错在哪里?
【问题讨论】:
-
你每次都引用同一个项目
-
您不会创建新的
Item,而是将您创建的单个Item的Name设置为"B"。您添加到列表中的所有内容都是对该单个Item的引用。 -
问题是,将
Item添加到列表时,它没有被复制。相反,对Item的引用被添加到列表中,这意味着您的变量item和您的列表入口指向同一个对象,这意味着如果您更改其中一个对象,另一个也会更改。您想要的是单独的项目,因此您需要在每个循环中创建一个新的Item -
你应该这样做
item = new Item(); item.Name = "B"; -
@ChetanRanpariya 这不是问题,另外,对象初始化语法优于赋值,Visual Studio 本身甚至向您展示了使用对象初始化的提示 (IDE0017)。加上这个:stackoverflow.com/a/12842511/9363973
标签: c#