2016-09-29 67 views
2

所以后改变我显然相当新的编程,但我想弄清楚这是为什么不工作C# - 这是为什么变量没有被通过的方法被放在

我试图采取字符串myname,并将先生添加到它的开始。我知道我可以做到这一点只是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; 
     } 

    } 

回答

5

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

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

myname = namechanger(myname); 

原始类型(intfloatlong等)以这种方式工作,因为这样做struct实例 - 所以一定要寻找那些在未来,如果您不确定为什么一个结构的价值在将其传递给方法时不会改变。

+2

所有类型都以这种方式工作,不仅仅是原始类型...... – aquinas

+0

也许是一种迂腐的意义,但用'class'和'struct'调用一个方法会传递非常不同的值 - 一个是指针,一个是整个结构。 “通过价值”和“通过参考”是用来区分行为差异的术语。 – Knetic

+0

@ Knetic - 不,那是不对的。 aquinas是正确的。 – Enigmativity

相关问题