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

C#-为什么这个变量在通过一个方法后没有被改变,c#,methods,C#,Methods,所以我显然对编程相当陌生,但我正试图弄明白为什么这不起作用 我正在尝试使用字符串myname,并将Mr.添加到它的开头。我知道我可以做得很简单,就像myname=“Mr.”+myname但是我试图了解如何使用方法来更改变量的值。那么,为什么这种情况没有改变呢 public class Program { public static void Main(string[] args) { string myname = "harry";

所以我显然对编程相当陌生,但我正试图弄明白为什么这不起作用

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

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

在这种情况下,由于
返回
名称更改器中修改过的字符串
,因此只需确保将
myname
分配给该方法的结果;像这样

myname = namechanger(myname);

基本类型(
int
float
long
,等等)是这样工作的,就像
struct
实例一样-因此,如果您不确定在将结构传递到方法时为什么结构的值没有改变,请务必在将来查找它。

所有类型都是这样工作的,而不仅仅是基本类型…可能是学究式的,但是用
class
vs
struct
调用一个方法会传递非常不同的值——一个是指针,一个是整个结构。“按值传递”和“按引用传递”是用于区分行为差异的术语。对字符串的引用实际上是按值传递的。它是对同一字符串的引用,不像传递DateTime那样,在函数中它是DateTime的不同实例。@Knetic,这不是按值传递和按引用传递。“ref”或“out”是指使某事物通过引用传递的东西。如果你不把它包括在内,它就是传递值。看:@Knetic-我一点也不困惑。这里有两个相互竞争的概念-引用/值类型和按引用/值传递。它们是两个不同的概念。这个问题围绕着传递值展开——它与引用/值类型无关。阿奎那说所有的类型都是这样工作的是正确的。