将对象设置为 null,来自列表
Set object to null, from list
我有一个变量,然后将该变量添加到列表中。如果我将 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 都会使它们都为空。有人可以解释为什么它不那样做,以及如何让它那样做吗?
并且由于列表包含对 's' 的引用,为什么 's = null' 不将列表项更改为空?
当您将 string
添加到 List
时,您只是在传递项目的值,而不是对象本身。
一种方法是将 string
包裹在另一个对象中:
public class wrapper
{
public string Str{get; set;}
public wrapper(str s)
{
Str = s;
}
}
通过使用这个对象,如果你更新对象的 Str
属性,那么它也会在 List
中改变,因为列表指向这个class 其中包含值。
这是您的示例,但正在使用中。
var s = new Wrapper("Buzz");
var l = new List<Wrapper>();
l.Add(s);
s.Str = null;
如评论中所述,这不是 C# 的工作方式。特别是,C# 不允许直接存储对对象的引用,只能作为另一个对象的一部分。因此,以下将起作用:
class Variable<T>
{
public Variable(T value) { Value = value; }
public T Value { get; set; }
}
var s = new Variable<string>("Test");
var list = new List<Variable<string>>();
list.Add(s);
那么你有一个
s.Value = null;
Debug.Log( list[0].Value ); //Null
Debug.Log( s.Value ); //Null
和乙
list[0].Value = null;
Debug.Log( list[0].Value ); //Null
Debug.Log( s.Value ); //Null
我有一个变量,然后将该变量添加到列表中。如果我将 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 都会使它们都为空。有人可以解释为什么它不那样做,以及如何让它那样做吗?
并且由于列表包含对 's' 的引用,为什么 's = null' 不将列表项更改为空?
当您将 string
添加到 List
时,您只是在传递项目的值,而不是对象本身。
一种方法是将 string
包裹在另一个对象中:
public class wrapper
{
public string Str{get; set;}
public wrapper(str s)
{
Str = s;
}
}
通过使用这个对象,如果你更新对象的 Str
属性,那么它也会在 List
中改变,因为列表指向这个class 其中包含值。
这是您的示例,但正在使用中。
var s = new Wrapper("Buzz");
var l = new List<Wrapper>();
l.Add(s);
s.Str = null;
如评论中所述,这不是 C# 的工作方式。特别是,C# 不允许直接存储对对象的引用,只能作为另一个对象的一部分。因此,以下将起作用:
class Variable<T>
{
public Variable(T value) { Value = value; }
public T Value { get; set; }
}
var s = new Variable<string>("Test");
var list = new List<Variable<string>>();
list.Add(s);
那么你有一个
s.Value = null;
Debug.Log( list[0].Value ); //Null
Debug.Log( s.Value ); //Null
和乙
list[0].Value = null;
Debug.Log( list[0].Value ); //Null
Debug.Log( s.Value ); //Null