【发布时间】:2019-05-12 12:13:33
【问题描述】:
class ListHolder
{
public List<char> List;
public ListHolder(List<char> l)
{
this.List = l;
}
}
class Program
{
static void Main(string[] args)
{
List<char> a = new List<char>();
a.Add('s');
ListHolder c = new ListHolder(a);
a.Clear();
Console.WriteLine(c.List.Count);
}
}
我已经在该类中添加了一些列表,然后我清除了列表并在类中写入了列表的计数...我希望输出应该是“1”(因为类中的列表包含字母's'),而是写“0”。怎么可能, a.Clear 甚至清除了班级中的列表?如何实现只清除 Main 中的列表和类中的列表?
【问题讨论】:
-
正确,您将 REFERENCE 传递给列表。
-
因为参考和价值(阅读这个:stackoverflow.com/questions/23107941/…)
-
c不包含新列表,它包含对原始列表a的引用,因此在a上调用Clear也会清除cl中的列表,因为它们是同样的事情 -
当您通过任何变量更新列表时引用它,此更改将反映在所有引用中。
-
我建议你阅读reference types