我有以下代码:
struct NewType
{
public int val;
}
static void Main(string[] args)
{
NewType i = new NewType();
List<NewType> IList = new List<NewType>();
i.val = 1;
IList.Add(i);
i.val = 2;
IList.Add(i);
}
之后,如果我打印IList列表中的每个元素,结果将为12
与我想像的相反22
因为:
有人告诉我为什么结果是12?
最佳答案
这是因为NewType
是struct
,它作为值类型添加到列表中(对象的副本添加到列表中,而不是对原始对象的引用)。
如果将其从struct
更改为class
,则将与您预期的一样。该类通过引用传递。
看看Classes and Structs (C# Programming Guide)
结构是一种值类型。创建结构时,变量
分配给该结构的文件包含该结构的实际数据。当。。。的时候
将struct分配给新变量,然后将其复制。新变量
因此原始变量包含两个单独的副本
相同的数据。对一个副本所做的更改不会影响另一副本。