class Class1  

  private string str = "Class1.str"; 
  static void StringConvert(string str1) 
    { 
      str1 = "string being converted."; 
    }
  static void Main()  
    { 
       string str = "A string";
       StringConvert(str);
       Console.WriteLine(str); // 运行结果是:A string
    }
}我在机器上运行了上面的代码,发现结果是A string,而不是我想象中的string being converted.不知道为什么?
我认为当执行过StringConvert方法后,局部变量str作为实际参数由原来的值A string就变成了string being converted.当输出时,自然就是string being converted.了。可是机器上显示的却是A string。不知道为啥?请帮我看一下,谢谢了!

解决方案 »

  1.   

    Main调用StringConvert方法没有返回值,输出的结果是Console.WriteLine(str)这句得到的
      

  2.   

    老问题了,又是关于string是引用类型不是值类型的问题..string是引用类型,只不过是比较特殊的引用类型..想实现你的效果,用ref..static void StringConvert(ref string str1) 
        { 
          str1 = "string being converted."; 
        }
      static void Main()  
        { 
           string str = "A string";
           StringConvert(ref str);
           Console.WriteLine(str); // 运行结果是:A string
        }
      

  3.   

    字符串是引用类型,但是作为参数传递的时候是传值。
    楼主的程序两个解决方法,一同楼上的,二如下,明白一些:
    class Class1  

      private string str = "Class1.str"; 
      static string StringConvert(string str1) 
        { 
          str1 = "string being converted."; 
          return str1;
        }
      static void Main()  
        { 
           string str = "A string";
           str = StringConvert(str);
           Console.WriteLine(str);
        }
    }
      

  4.   

    至于原因也说下吧:string str = "A string";
    str指向"A string"static void StringConvert(string str1) 
        { 
          str1 = "string being converted."; 
        }
    这时str1先指向"A string",但是当重新赋值str1 = "string being converted."; 后,会另外分配一块地址,存放"string being converted",并且str1指向它..但str的指向并没有变,始终指向"A string"..
      

  5.   

    string 值类型 而非你所想的引用类型 所以不会得到你所希望的结果
      

  6.   

    TO:string 值类型 而非你所想的引用类型 所以不会得到你所希望的结果string是引用类型,只不过有点特殊..不要误导楼主..