static void Main(string[] args)
{
var vs = new List<Person> { new Person(1) };
vs[0].IncrementAge();
Console.WriteLine(vs[0].Age); // output: 1
}
struct Person
{
public int Age { get; set; }
public Person(int age) : this()
{
Age = age;
}
public int IncrementAge()
{
Age++;
return Age;
}
}
我理解为什么我们会得到这样的结果。列表索引器返回该元素的副本。没关系。我的问题是,为什么我们在以下代码中没有得到相同的结果?因为我更改了复制元素的值
static void Main(string[] args)
{
var vs = new List<int> { 1 };
vs[0] = 2;
Console.WriteLine(vs[0]); // output: 2, **why not 1?**
}
为什么剂量覆盖复制元素的整个值影响列表?。我想知道如何在后台处理此代码。
在此行:
vs[0].IncrementAge();
您检索索引0处的值,这将创建struct
的副本。在副本中,Age
递增,副本为然后丢失。它不会保存回列表中。
相反,在这里:
vs[0] = 2;
您替换在位置0处的值带有一个新值。这就是为什么更改了[[在列表中。