将Trim()应用于字符串而不分配给变量

Luk*_*uke 5 c# trim

是否可以在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)

Guf*_*ffa 6

不,这是不可能的(在语言的使用范围内).

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)