c# -为什么这个变量在通过一个方法之后没有被改变?

本文关键字:之后 方法 一个 改变 为什么 变量 | 更新日期: 2023-09-27 18:09:15

所以我显然是相当新的编程,但我试图找出为什么这是不工作

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

c# -为什么这个变量在通过一个方法之后没有被改变?

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

在这种情况下,因为你returnnamechanger修改字符串,所有你需要做的是确保你分配myname给该方法的结果;就像

myname = namechanger(myname);

基本类型(int, float, long等)以这种方式工作,struct实例也是如此-因此,如果您不确定为什么结构体的值在传递给方法时不会改变,请务必在将来查找。