C# - 为什么在通过方法之后不会更改此变量

时间:2016-09-29 02:01:12

标签: c# methods

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

我正在尝试使用字符串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;
        }

    }

1 个答案:

答案 0 :(得分:6)

Strings are immutablepassed by value。每次创建字符串时,都不会更改。因此,与类的实例不同,您不能通过将字符串交给修改它的方法来修改字符串。

在这种情况下,由于您在returnnamechanger修改了字符串,因此您需要做的就是确保将myname分配给该方法的结果;像这样

myname = namechanger(myname);

原始类型(intfloatlong等)以这种方式工作,struct个实例也是如此 - 所以请务必在将来查找,如果您在将结构的值传递给方法时不确定为什么结构的值没有改变的话。