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

时间:2009-12-22 20:36:38

标签: c#

对于以下代码,我无法让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的字符串保持不变。

4 个答案:

答案 0 :(得分:46)

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

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

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

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

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

请注意,这适用于所有其他string函数,例如RemoveInsert,trim和substring变体 - 所有这些函数都返回新字符串,因为原始字符串无法修改。< / p>

答案 1 :(得分:2)

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

应该适合你

答案 2 :(得分:1)

字符串是不可变的,替换将返回一个新字符串,因此您需要类似

的字符串
string newstring = someTestString.Replace(someID.ToString(), sessionID);

答案 3 :(得分:1)

您可以使用

达到预期的效果
someTestString = someTestString.Replace(someID.ToString(), sessionID);

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