此代碼是否需要x並直接更改其內容或創建一個臨時新字符串然後複製到x?這段代碼是否創建一個臨時字符串?
如果後者是真的,我不明白我們爲什麼使用ref。
public static void RemoveSpaces(ref string x)
{
x = x.Replace(" ", "");
}
此代碼是否需要x並直接更改其內容或創建一個臨時新字符串然後複製到x?這段代碼是否創建一個臨時字符串?
如果後者是真的,我不明白我們爲什麼使用ref。
public static void RemoveSpaces(ref string x)
{
x = x.Replace(" ", "");
}
是的,它會創建新的字符串。
你在string
上做的任何操作都會創建新的字符串,因爲string
是不可變的類型。
如果你不使用ref,當你調用該函數時它不會工作。
string y = "Subash Kharel";
RemoveSpaces(y);
Console.Write(y);
當你不使用ref時,結果將是「Subash Kharel」。
這不是很好解釋,但這個人就在這裏。如果在調用中不使用ref關鍵字,並且在方法中刪除**,則無法使用y查看更改。 – Steve
如果你不想使用ref
你可以在你的簽名從void
改變string
和使用它像這樣
public static string RemoveSpaces(string x)
{
return x.Replace(" ","");
}
我認爲這是個人喜好的問題。
考慮到c#中的字符串是不可變的,是的,一個新的實例被創建,然後'x'的指針被分配給該新的實例。 – zaitsman
[C#中可變和不可變字符串之間的區別是什麼?](https://stackoverflow.com/questions/4274193/what-is-the-difference-between-a-mutable-and-immutable- string-in-c) – Progman
@zaitsman指向新實例的指針是x還是相反?我的意思是x保存新形成的字符串的第一個字符的地址? – Lyrk