2017-12-27 29 views
1

此代碼是否需要x並直接更改其內容或創建一個臨時新字符串然後複製到x?這段代碼是否創建一個臨時字符串?

如果後者是真的,我不明白我們爲什麼使用ref。

public static void RemoveSpaces(ref string x) 
    { 
     x = x.Replace(" ", ""); 
    } 
+3

考慮到c#中的字符串是不可變的,是的,一個新的實例被創建,然後'x'的指針被分配給該新的實例。 – zaitsman

+0

[C#中可變和不可變字符串之間的區別是什麼?](https://stackoverflow.com/questions/4274193/what-is-the-difference-between-a-mutable-and-immutable- string-in-c) – Progman

+0

@zaitsman指向新實例的指針是x還是相反?我的意思是x保存新形成的字符串的第一個字符的地址? – Lyrk

回答

5

是的,它會創建新的字符串。
你在string上做的任何操作都會創建新的字符串,因爲string是不可變的類型。

0

如果你不使用ref,當你調用該函數時它不會工作。

string y = "Subash Kharel"; 
RemoveSpaces(y); 
Console.Write(y); 

當你不使用ref時,結果將是「Subash Kharel」。

+1

這不是很好解釋,但這個人就在這裏。如果在調用中不使用ref關鍵字,並且在方法中刪除**,則無法使用y查看更改。 – Steve

1

如果你不想使用ref你可以在你的簽名從void改變string和使用它像這樣

public static string RemoveSpaces(string x) 
{ 
    return x.Replace(" ",""); 
} 

我認爲這是個人喜好的問題。

相關問題