在以下程序中创建c#列表有什么区别

时间:2019-01-31 06:54:59

标签: 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);
    }
}

2 个答案:

答案 0 :(得分:1)

List<T>是引用类型,您要做的就是复制引用,本质上,多个变量可以包含相同的引用...然后,当您调用==时,它基本上告诉您 >是相同的参考

可以认为参考是一张纸上写着某人的名字。当您称呼喜欢这个的东西

 List<string> l3 = l1;
 List<string> l4 = l1;

您所做的所有事情(对于引用类型而言)都是在复制姓名,而不是人名

在这里Reference types (C# Reference)

了解更多
  

C#中有两种类型:引用类型和值类型。   引用类型的变量存储对其数据(对象)的引用,   而值类型的变量直接包含其数据。 使用   引用类型,两个变量可以引用同一对象;   因此,对一个变量的运算会影响所引用的对象   通过另一个变量。对于值类型,每个变量都有其自己的   数据的副本,并且不可能对一个数据进行操作   会影响其他变量的变量(除非是in,ref和out   参数变量参见in,ref和out参数修饰符。)

答案 1 :(得分:0)

从技术上讲,L1,L3,L4共用同一间房屋(即参考资料)和器皿(即列表中的物品),而L2居住在不同的房屋中,但该房屋的结构与L1的房屋相同,甚至他带来了与L1。

执行此操作时-

List<string> l2 = new List<string>(l1);

创建一个新的L2清单(房屋),该清单具有与L1相同的项目。但是,当您执行此操作时-

 List<string> l3 = l1;

L3被称为L1的列表,并且L3可以直接访问和操纵L1的项目,这意味着,如果L3删除任何项目,L1也会丢失该项目。