在下面的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);
}
}
答案 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也会丢失该项目。