このコードは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キーワードを使用せず** remove **メソッドを使用しても、yを使って変更を見ることはできません。 – Steve
あなたがstring
にvoid
からあなたの署名を変更し、この
public static string RemoveSpaces(string x)
{
return x.Replace(" ","");
}
ようにそれを使用することができref
使用したくない場合は、私は、それは個人の好みの問題だと思います。
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