c# - 在以下程序中创建 c# 列表有什么区别
问题描述
在下面的c#程序中,l1和l2有什么区别?
第一个控制台输出为 False。第二个控制台输出为 True.. 为什么?
class Program
{
public static void Main(string[] args)
{
List<string> l1 = new List<string>();
l1.Clear();
l1.Add("test1");
List<string> l2 = new List<string>(l1);
List<string> l3 = l1;
List<string> l4 = l1;
Console.WriteLine(l2 == l3);
Console.WriteLine(l3 == l4);
}
}
解决方案
从技术上讲,L1、L3、L4 共享相同的房子(即参考)和器具(即列表中的项目),而 L2 住在不同的房子里,但那房子的结构是按照 L1 的房子,甚至他带来了类似于 L1 的器具。
当你这样做时——
List<string> l2 = new List<string>(l1);
为 L2 创建了一个新的 List(house),它具有与 L1 相同的项目。但是当你这样做时——
List<string> l3 = l1;
L3 指的是 L1 的 List,L3 可以直接访问和操作 L1 的 Items,这意味着如果 L3 删除任何 item,L1 也会丢失该 Item。
推荐阅读
- asp.net-core-3.1 - 将包从“Microsoft.Extensions.Configuration.AzureKeyVault”更改为“Azure.Extensions.AspNetCore.Configuration.Secrets”
- python - DL 的 MFCC 标准化
- javascript - 代码在使用 javascript 的“addEventListener”中不起作用
- c - c语言如何在内存中存储int?
- javascript - Wordpress 在滚动时淡入/淡出(向上和向下)
- windows - 在哪里可以找到适用于 Window 10 的 G++ 最新版本?
- flutter - 如何使用 mockito 测试空值?
- typescript - 如何重命名 Typescript 类型的某些键
- c# - NavMeshAgent 首先旋转到目标方向然后移动到它?
- python - PyAutoGui 鼠标不会移动