2016-09-29 70 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

相關問題