C# – 为什么在通过方法后没有改变这个变量

所以我显然对编程很新,但我想弄清楚为什么这不起作用

我正在尝试使用字符串myname,并将Mr.添加到它的开头。 我知道我可以简单地将其作为myname = "Mr. " + myname但我试图了解如何使用方法来更改变量的值。 那么,为什么这不会改变呢?

 public class Program { public static void Main(string[] args) { string myname = "harry"; Console.WriteLine(myname); //output is harry namechanger(myname); //this should modify harry to Mr. Harry Console.WriteLine(myname); //output is still harry? } static string namechanger(string name) { name = "Mr. " + name; return name; } } 

字符串是不可变的 ,并且通过值传递 。 每次创建字符串时,都不会更改。 因此,与类的实例不同,您不能通过将字符串交给修改它的方法来修改字符串。

在这种情况下,由于您在namechanger return已修改的String,因此您需要做的就是确保将myname分配给该方法的结果; 像这样

 myname = namechanger(myname); 

原始类型( intfloatlong等)就像struct实例一样工作 – 所以一定要在将来查找它,如果你不确定为什么结构的值在你传递给它时没有改变方法。