首页 > 解决方案 > 在以下程序中创建 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);
    }
}

标签: c#

解决方案


从技术上讲,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。


推荐阅读