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
函数,例如 Remove
、Insert
、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(或其他字符串修改)不起作用的主要内容,如果未能解决你的问题,请参考以下文章