此代码是否需要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