gpt4 book ai didi

c# - 为什么list在c#中保留另一个空列表的值

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:26 24 4
gpt4 key购买 nike

我正在研究 Stack 和 Heap 之间的差异,并尝试了解引用类型和值类型变量。我的理解是引用类型保存存储在堆中的值的地址,如果堆中的值发生变化,对该地址的所有引用都将指向新值,所以我玩了下面的代码,但我想知道为什么下面的代码当 lt1 设置为 null 时打印值 10:

public void Method4()
{
List<int> lt1 = new List<int>() { 1, 2, 3, 4 };
List<int> lt2 = lt1;
lt1 = null;
int xx = lt2.Sum();
Console.WriteLine(xx);
}

但是当 lt1 被清除时它打印 0

public void Method4()
{
List<int> lt1 = new List<int>() { 1, 2, 3, 4 };
List<int> lt2 = lt1;
lt1.Clear();
int xx = lt2.Sum();
Console.WriteLine(xx);
}

我认为 lt2 持有 lt1 的引用,当 lt1 设置为 null 时 lt2 也应该为 null 但事实并非如此。

后台发生了什么?

最佳答案

  • lt1 持有指向列表的指针
  • lt2 保存指向列表的指针

如果您在“lt1”中编辑列表,它们也会在“lt2”中编辑,因为它们在列表中编辑,而不是在指针中编辑。

但是您是在告诉“lt1 现在应该指向 null”。这并不意味着 lt2 应该指向 null。

关于c# - 为什么list在c#中保留另一个空列表的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37302634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com