2017-12-27 14 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キーワードを使用せず** remove **メソッドを使用しても、yを使って変更を見ることはできません。 – Steve

1

あなたがstringvoidからあなたの署名を変更し、この

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

ようにそれを使用することができref使用したくない場合は、私は、それは個人の好みの問題だと思います。

関連する問題