我有以下代码:

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?

最佳答案

这是因为NewTypestruct,它作为值类型添加到列表中(对象的副本添加到列表中,而不是对原始对象的引用)。

如果将其从struct更改为class,则将与您预期的一样。该类通过引用传递。

看看Classes and Structs (C# Programming Guide)


  结构是一种值类型。创建结构时,变量
  分配给该结构的文件包含该结构的实际数据。当。。。的时候
  将struct分配给新变量,然后将其复制。新变量
  因此原始变量包含两个单独的副本
  相同的数据。对一个副本所做的更改不会影响另一副本。

10-01 20:00