对于以下代码,我无法使string.Replace工作: ,而someID.ToString()包含“ 108716308”,而sessionID包含“ 1087163075”。

我不知道为什么这不起作用。 />
someTestString.Replace(someID.ToString(), sessionID);


结果(在someTestString中)应为:

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


,但不会改变。击中我的代码后,someTestString的字符串保持不变。

评论

经典.net编码错误。我想每个人都已经匆忙地碰了一遍了:-)))

如此普遍以至于CoffeeAddict一个月后犯了同样的错误:) stackoverflow.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和substring变体-它们都将返回新字符串,因为原始字符串不能已修改。

评论


所以看起来您不能只是将其设置为自身:someTestString = someTestString.Replace(someID.ToString(),sessionID);

–PositiveGuy
09年12月22日在20:45

好吧,我想我需要开始更多地研究正则表达式...对于一个没有太多接触过的新手来说,这是一个痛苦。...因为这只是同性恋,而正则表达式是下一个最佳选择。

–PositiveGuy
09年12月22日在20:45

您确定论点正确吗?您说someID是108716307,但是someTestString的值是108716305 ...,因此最后一位是不同的,因此不会匹配。

– womp
09-12-22在20:48

命名不好。麻烦的是,任何其他名称都会更长且笨拙。 (GetWithReplacement?GetAfterReplacing?ReplaceAndReturn?)

–瑞安·伦迪(Ryan Lundy)
09年12月22日在21:09

“所以看起来您不能只是将其设置为自身而已”-是的,您可以。

– Alex
09-12-22在21:27

#2 楼

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


应该为您工作的

#3 楼

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

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


#4 楼

您可以通过使用

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


达到预期的效果,如womp所说,字符串是不可变的,这意味着它们的值不能在不更改整个对象的情况下进行更改。