当前位置:编程学习 > C#/ASP.NET >>

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的地址,因此,他们实质上指向同一个变量,当你修改其中一个指针指向的地址的对象的时候,另一个指针的值当然也会改变 --------------------编程问答--------------------
引用 6 楼 wuyq11 的回复:
List<T>是引用类型,指向同一个引用,修改
当然变化

为什么我试了一下不会改变的啦?跪求 --------------------编程问答--------------------
引用 8 楼 llf94632525 的回复:
会的……
顺便问下,一楼你5个裤衩怎么来的?

原来会变啊
蹭分来的呗 --------------------编程问答-------------------- 主要搞清是传值还是传引用 --------------------编程问答--------------------  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的操作,这也是引用类型和值类型传递的区别之一 --------------------编程问答--------------------
引用 15 楼 likedefly 的回复:
list2=list1,是将list1的地址赋值给list2的地址,所以对list2的操作就等于是list1的操作,这也是引用类型和值类型传递的区别之一

up  --------------------编程问答--------------------
引用 10 楼 yu1989226 的回复:
引用 6 楼 wuyq11 的回复:
List<T>是引用类型,指向同一个引用,修改
当然变化

为什么我试了一下不会改变的啦?跪求


两种不同的赋值;一个有变化,一个没有
//没有变化的
 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都是对象的别名罢了。 --------------------编程问答--------------------
引用 17 楼 duan_dream 的回复:
引用 10 楼 yu1989226 的回复:
引用 6 楼 wuyq11 的回复:
List<T>是引用类型,指向同一个引用,修改
当然变化

为什么我试了一下不会改变的啦?跪求


两种不同的赋值;一个有变化,一个没有
//没有变化的
 public void ListTest()
  {
  List<string> list1 = new List<string>()……


第一种反过来看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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,