string.Replace(或其他字符串修改)不起作用

Posted

技术标签:

【中文标题】string.Replace(或其他字符串修改)不起作用【英文标题】:string.Replace (or other string modification) not working 【发布时间】:2021-10-14 01:25:55 【问题描述】:

对于以下代码,我无法让string.Replace 工作:

someTestString.Replace(someID.ToString(), sessionID);

当我调试和检查参数时,它们具有我期望的值 - 即 someID.ToString() 得到“1087163075”,sessionID 具有“108716308”,someTestString 包含“1087163075”。

我不知道为什么这不起作用更改 someTestString

完整示例:

string someTestString = 
      "<a href='myfoldert/108716305-1.jpg' target='_blank'>108716305-1.jpg</a>"
someTestString.Replace("108716305", "NewId42");  

结果(someTestString)应该是这样的:

"<a href='myfoldert/NewId42-1.jpg' target='_blank'>NewId42-1.jpg</a>" 

但它不会改变。 someTestString 的字符串在点击我的代码后保持不变。

【问题讨论】:

经典 .net 编码错误。我想每个人都已经匆忙地遇到过一两次了:-))) CoffeeAddict 在一个月后犯了同样的错误很常见 :) ***.com/questions/1558024/string-replace-not-working 请注意,您希望更改字符串的System.String 类型上的每个操作都存在完全相同的问题 - 它们不会更改字符串 - 它们会返回带有更改的新字符串。 【参考方案1】:

字符串是不可变的。 string.Replace 的结果是具有替换值的新字符串。

您可以将结果存储在新变量中:

var newString = someTestString.Replace(someID.ToString(), sessionID);

如果您只想观察“字符串更新”行为,或者只是重新分配给原始变量:

someTestString = someTestString.Replace(someID.ToString(), sessionID);

请注意,这适用于所有其他 string 函数,例如 RemoveInsert、trim 和子字符串变体 - 它们都返回新字符串,因为原始字符串无法修改。

【讨论】:

所以看起来你不能这样做并将其设置为自身:someTestString = someTestString.Replace(someID.ToString(), sessionID); 好吧,我想我需要开始更多地研究正则表达式......对于一个没有接触太多它的新手来说是痛苦的......因为这只是同性恋和正则表达式最好的下一个选择。 你确定你的论点是正确的吗?你说 someID 是 108716307,但是你的 someTestString 的值是 108716305...所以最后一个数字不同,所以不匹配。 这名字不好。问题是,任何其他名称都会更长且笨拙。 (GetWithReplacement?GetAfterReplacing?ReplaceAndReturn?) “所以看起来你不能只这样做并将其设置为自身” - 是的,你可以。【参考方案2】:
someTestString = someTestString.Replace(someID.ToString(), sessionID);

这应该适合你

【讨论】:

【参考方案3】:

字符串是不可变的,替换会返回一个新字符串,所以你需要类似

string newstring = someTestString.Replace(someID.ToString(), sessionID);

【讨论】:

【参考方案4】:

你可以通过使用来达到想要的效果

someTestString = someTestString.Replace(someID.ToString(), sessionID);

正如 womp 所说,字符串是不可变的,这意味着它们的值不能在不改变整个对象的情况下改变。

【讨论】:

以上是关于string.Replace(或其他字符串修改)不起作用的主要内容,如果未能解决你的问题,请参考以下文章

String.replace

String.Replace 仅替换第一次出现的匹配字符串。如何替换 *all* 出现?

C#在引号内加引号?

string.replace正则表达式说明

String.replace使用技巧

是否存在不区分大小写的 string.Replace 替代方法?