是否可以在Trim()不分配给新变量或现有变量的情况下将字符串应用于字符串?
var myString = " my string ";
myString.Trim();
// myString is now value "my string"
Run Code Online (Sandbox Code Playgroud)
而不是必须将其分配给新变量或自身?
var myString = " my string ";
myString = myString.Trim();
// myString is now value "my string"
Run Code Online (Sandbox Code Playgroud)
不,这是不可能的(在语言的使用范围内).
String.NET中的类是不可变的,这意味着特定的字符串永远不会改变.这允许代码在方法之间传递字符串,而不必复制字符串以防止原始文件发生变化.
字符串存储在内存中的某个位置,因此如果您继续挖掘它,您可以更改对象的内容,从而更改字符串的值.但是,这违反了字符串在语言中如何工作的规则,并且您最终可能会更改在您未预料到的地方使用的字符串.
字符串文字由编译器实现,这意味着即使您已" my string "在代码中的多个位置编写,它在编译时也只是一个字符串对象.如果要更改该字符串,则应在使用该字符串的所有位置更改该字符串.
例:
string test = "My string";
unsafe {
// Note: example of what NOT TO DO!
fixed (char* p = test) {
*p = 'X';
}
}
string another = "My string";
Console.WriteLine(another);
Run Code Online (Sandbox Code Playgroud)
输出:
Xy string
Run Code Online (Sandbox Code Playgroud)