C#泛型集合“=”操作如何?
假如我有一个已经添加好了List<T> list1,如果我再写一条语句List<T> list2=list1,那么我修改list2中的元素是否会改变List1中元素。 --------------------编程问答-------------------- 不会 --------------------编程问答-------------------- 显然会。List<T> list2=list1;
你创建一个引用,指向list1指向的那个对象了,仅此而已。
另外,你试试不就知道了? --------------------编程问答--------------------
List<string> list1 = new List<string>();
List<string> ll = list1;
没报错 --------------------编程问答-------------------- 显然会。
List<T> list2=list1;
你创建一个引用,指向list1指向的那个对象了 --------------------编程问答-------------------- 会更改... --------------------编程问答-------------------- List<T>是引用类型,指向同一个引用,修改
当然变化 --------------------编程问答-------------------- 不会的.将list1赋值list2..只是将list1复制一份副本,再传给list2,所有修改list2中的元素,不会修改list1中的 --------------------编程问答-------------------- 会的……
顺便问下,一楼你5个裤衩怎么来的? --------------------编程问答-------------------- List<T>这种类型是引用类型,因此会List2中的元素会更改List1中的元素.
你可以这样来看待C#中的对象类型:
一个对象的变量就是指向实体的一个指针,例如你的list1是一个空指针,list2 = list1就是让指针list2也指向list1的地址,因此,他们实质上指向同一个变量,当你修改其中一个指针指向的地址的对象的时候,另一个指针的值当然也会改变 --------------------编程问答--------------------
为什么我试了一下不会改变的啦?跪求 --------------------编程问答--------------------
原来会变啊
蹭分来的呗 --------------------编程问答-------------------- 主要搞清是传值还是传引用 --------------------编程问答-------------------- public void listtest()
{
List<string> list1= new List<string>();
list1.Add("aaa");
List<string> list2= new List<string>();
list2=list1;
list2[0] = "vvv";
Console.WriteLine(list1[0]);
}
干嘛不自己试一下,你猜结果是什么?是VVV!
list2=list1的效果和遍历list1再赋给list2的效果是不一样的,一个是地址引用,一个是直接性复制。
地址引用的时候,不管修改哪一个,本质上都是对那个地址内容的更改。 --------------------编程问答-------------------- 有说会变的,还有说不会变的,我试试去。 --------------------编程问答-------------------- list2=list1,是将list1的地址赋值给list2的地址,所以对list2的操作就等于是list1的操作,这也是引用类型和值类型传递的区别之一 --------------------编程问答--------------------
up --------------------编程问答--------------------
两种不同的赋值;一个有变化,一个没有
//没有变化的
public void ListTest()
{
List<string> list1 = new List<string>();
list1.Add("aaa");
List<string> list2 = new List<string>();
list2.Add("bbb");
list2 = list1;
Response.Write(list1[0]);
}
// 有变化的
public void listtest()
{
List<string> list1 = new List<string>();
list1.Add("aaa");
List<string> list2 = new List<string>();
list2 = list1;
list2[0] = "vvv";
Response.Write(list1[0]);
}
第一种好像是添加元素,,第二种好像是给制定的元素赋值。。。我也不知道怎么解释了,希望高手给做个解释吧。 --------------------编程问答-------------------- .net的对象是在堆上创建的,如List<int> ls=new List<int>(); 这样在堆中就创建了一个对象X。ls可用引用X,并对X进行操作。
List<int> ls2=ls; 使的ls2也能引用X。因此对ls2的任何操作最终都反映到X上了。
总而言之,只new了一个对象。ls和ls2都是对象的别名罢了。 --------------------编程问答--------------------
第一种反过来看list1 = list2;你逻辑错了 --------------------编程问答-------------------- List<string> list1 = new List<string>();
list1.Add("aaa");
List<string> list2 = new List<string>();
list2 = list1;
list2[0] = "vvv";
你改List2里面的。list1里面的不也是变化了么?这说明list1和list2的地址就是指到同一个地方,跟我说的没有什么矛盾。这跟你第一个例子也不是一回事情,你仔细看你List的add的位置
补充:.NET技术 , C#