【发布时间】:2019-02-14 07:27:39
【问题描述】:
我有一个变量,然后将该变量添加到列表中。如果我将 list[0] 设置为 null,它只是从列表中删除,并且变量仍然不为 null。
如果我将变量设置为 null,则列表中的变量不为 null。
var s = new String("Test".ToCharArray()); //Example of class
var list = new List<String>();
list.Add(s);
答:
s = null;
Debug.Log( list[0] ); //Test
Debug.Log( s ); //Null
乙:
list[0] = null;
Debug.Log( list[0] ); //Null
Debug.Log( s ); //Test
我的实际代码要复杂得多,包含多个变量和对象,一些变量持有同一个对象的实例(都不是结构),一个包含所有对象的列表。
执行 'list[0] = null' 只会清空该列表中的第 0 个位置,而不是使该对象为空,并且我希望该对象也设置为空。
我预计 A 和 B 都会使它们都为 null。有人可以解释为什么它不这样,以及如何让它这样吗?
既然列表包含对 's' 的引用,为什么 's = null' 不会将列表项更改为 null?
【问题讨论】:
-
这不是 C# 的工作方式。对不起。
-
那么有没有类似于指针数组的类型,我可以将指针保存在列表中,以便我可以从列表中更改该对象的实际值?
-
您有两个变量来承载对对象的引用。引用变量只是保存一个值的变量,该值是对对象所在内存的“引用”。当您将一个变量设置为 null 时,您只是更改了该变量的值,而不是另一个变量的值
-
我认为的问题是字符串是按值而不是引用传递的,因此列表仍然具有相同的值。