[英]c# nulling a item of generic list (List<Person>) really
我创建了一个类( Person )并从中创建了一个对象,然后将其添加到通用列表中并初始化为 null 但这不会影响主对象! 我希望它影响它,tnks :)
Person i = new Person();
i.Name = "asal";
i.Age = 25;
List<Person> lst = new List<Person>();
lst.Add(i);
lst[0] = null;
Console.WriteLine($"Age: {i.Age}, Name: {i.Name}");
Console.ReadKey();
请看图片
您需要先了解堆内存和引用。 在您的代码中, i
和lst[0]
指向内存中的同一个对象。
i -->
{ 姓名:“Afsal”,年龄:25}<-- lst[0]
通过做lst[0]=null;
您只是删除了引用而不是对象本身。 同时i
仍然会指向完整的person
i -->
{ 姓名:“Afsal”,年龄:25}
也许这会帮助您了解正在发生的事情:
lst.Add(i)
将存储在i
的人的引用添加到列表中。 lst[0] = null
表示null
现在应该是列表中的第一个元素。
存储的人本身不会直接改变,它不再是列表的一部分。 如果要更改存储在列表中的对象的值,则需要访问其属性,例如: lst[0].Name = null;
.
您可以将变量i
视为对某人的引用。 如果设置i=null
,则不会直接更改存储在i
的对象。 i
现在只引用null。 列表中的元素也是如此。
想象一下带狗去散步
Person i = new Person();
i
是狗头的把手。 它在你的手中。 引线的另一端连接到狗( new Person
是狗)。 你手中的把手是对狗的参考
现在想象一个朋友和你一起散步。 他们也有领先优势。
lst.Add(i);
现在你的朋友lst
已经将他们的线索连接到了狗身上。 一只狗,两条线索,两个人。 两条引线都直接连接到狗
lst[0] = null;
现在你的朋友已经断开了他们与狗的连接。 你的铅仍然与狗相连。 它们的断开对您的引线与狗的连接没有影响
lst[0] = i;
他们的铅直接重新连接到狗。 这是另一个重要的点。 这行代码没有将他们的线索连接到你的线索的句柄。 没有“将引线链接在一起,以便将狗放在一根更长的引线上”。 连接始终直接指向狗,这意味着断开连接不会影响其他连接
如果您想让狗跑掉并被狗管理员(垃圾收集器)接走,您必须断开两条线
lst[0] = null;
i = null;
再见,菲多!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.