2017-12-27 31 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(" ",""); 
} 

我认为这是个人喜好的问题。

相关问题