繁体   English   中英

c# 将泛型列表的一项归零(列表<Person> ) 真的

[英]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();

请看图片

بعد از اجرا مقدادیر را نشان میدهد ولی میخواهم ارور بدهد چون مقدادارش نشال

您需要先了解堆内存和引用。 在您的代码中, ilst[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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM