将对象添加到List等集合时会发生什么?
List<Person> people = new List<Person>();
Person dan = new Person() { Name="daniel", Age=10 };
people.Add(dan);
dan = new Person() { Name = "hw", Age = 44 };
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,List<Person> people不会受到最后一行的影响.所以我假设名单副本的引用添加的对象,更改参考,所以当,列表不会被影响.我对么?
好吧,你显示的代码实际上根本没有添加任何内容.我认为你的意思是:
people.Add(dan);
Run Code Online (Sandbox Code Playgroud)
在哪里?
但是,是的,List<T>包含对象的引用.它不知道引用的来源.值得清楚的是变量与其值之间的差异.你打电话的时候:
people.Add(dan);
Run Code Online (Sandbox Code Playgroud)
dan在这种情况下,复制参数expression()的值作为参数的初始值List<T>.Add.该值只是一个引用 - 它与dan变量没有关联,除了它恰好是List<T>.Add被调用时变量的值.
它与以下情况完全相同:
Person p1 = new Person { Name = "Jon" };
p2 = p1;
p1 = new Person { Name = "Dan" };
Run Code Online (Sandbox Code Playgroud)
这里,值p2仍然是对名为"Jon"的人的引用 - 第二行只是复制p1to 的值p2而不是将两个变量关联在一起.一旦理解了这一点,就可以将相同的逻辑应用于方法参数.