static void Main(string[] args)
        {
            List<string> list = new List<string>();
            list.Add("1");
            string tmp = list[0];
            tmp = "0";
            Console.Write(list[0]);
            string tm = "1";
            list[0] = tm;
            tm = "0";
            Console.Write(list[0]);
            Console.Read();
        }
输出结果:?
why?

解决方案 »

  1.   

     List<string> list = new List<string>();
      list.Add("1");   往链表加一个值“1”
      string tmp = list[0];   声明一个变量赋值为1
      tmp = "0";改为0
      Console.Write(list[0]);  这里输出还是list[0]的值
      string tm = "1";  声明为1
      list[0] = tm;   list[0]此时为1
      tm = "0";  改为0
      Console.Write(list[0]);
      Console.Read();
      

  2.   

    输出11
    tmp和list[0]不指向同一个内存空间,你改变一个不会影响另一个
      

  3.   

    如果这样呢?
     List<int> list = new List<int>();
                list.Add(1);
                int tmp = 2;
                list[0] = tmp;
                Console.Write(tmp);
                Console.Read();
    你看输出几??
    是2!
      

  4.   

    都是1,题中你只是给tmp进行了两次赋值,并没有对List做什么改变。
      string tmp = list[0];
      tmp = "0";这个过程只是tmp的值变化了,
     string tmp = list[0];
    tmp =5;
    list[0] =tmp;
    这样list[0]的值才变化了。楼主是没有掌握赋值语句吧,赋值语句 也就是 = ,是把后边的变量给了前边的变量,而后边的变量并没有改变。
      

  5.   

    C#中string类型是一个比较特别的类型,它是一种引用类型,但在使用中,它表现的像一个值类型一样。这是因为string是不可变的(immutable)。  string具有以下的一些特性:   1. string是一个字符序列,是String类的一个别名,别且它是一个关键字。  2. string是引用类型,每个string实例是一个常量,是不可变的,因此对一个string进行修改时,实际上都是创建了一个新实例。  
    http://www.cnblogs.com/aaronbao/archive/2010/03/14/1685418.html