我想它必须做一些字符串作为参考类型,但我不知道为什么根本string.Replace("X","Y")不起作用?
我为什么要这么做string A = stringB.Replace("X","Y")?我认为这只是在指定实例上完成的方法.
编辑:谢谢你到目前为止.我提出我的问题:为什么b+="FFF"工作但b.Replace不工作?
Mar*_*ers 16
为什么不起作用
stringA.Replace("X","Y")?
我为什么要这么做stringB = stringA.Replace("X","Y");?
因为字符串在.NET中是不可变的.您无法更改现有字符串对象的值,您只能创建新字符串.string.Replace创建一个新字符串,如果您希望保留对它的引用,则可以将其分配给某个字符串.从文档:
返回一个新字符串,其中当前实例中所有出现的指定字符串都替换为另一个指定的字符串.
强调我的.
所以如果字符串是不可变的,为什么b + ="FFF"; 工作?
好问题.
首先注意b += "FFF";相当于b = b + "FFF";(除了b只评估一次).
表达式b + "FFF"创建一个具有正确结果的新字符串,而不修改旧字符串.然后分配对新字符串b的引用以替换对旧字符串的引用.如果没有对旧字符串的其他引用,那么它将有资格进行垃圾回收.
字符串是不可变的,这意味着一旦它们被创建,它们就不能再被更改了.这有几个原因,据我所知,主要是因为性能(如何在内存中表示字符串).
另见(在众多中):
作为直接结果,每个字符串操作都会创建一个新的字符串对象.特别是,如果你做的事情
foreach (string msg in messages)
{
totalMessage = totalMessage + message;
totalMessage = totalMessage + "\n";
}
Run Code Online (Sandbox Code Playgroud)
实际上,您可能会创建数十个或数百个字符串对象.因此,如果您想更复杂地操作字符串,请遵循GvS的提示并使用StringBuilder.
小智 0
String.Replace 是字符串类的共享函数,它返回一个新字符串。它不是当前对象的运算符。b.Replace("a","b") 类似于只有 c+1 的行。因此,就像 c=c+1 实际上将 c+1 的值设置为 c 一样,b=b.Replace("a","b") 将返回的新字符串设置为 b。
| 归档时间: |
|
| 查看次数: |
1149 次 |
| 最近记录: |