string.Replace不按预期运行

时间:2009-05-11 02:05:34

标签: c# .net string

有人可以解释为什么我会从这两个陈述中得到不同的结果吗?我认为将值重新分配给同一个变量会导致我在上面的例子中得到的值。我在这里缺少什么?

_body.Replace("##" + _variableName + "##",
    templateVariables[_variableName])

Hello pitty ## LastName ##,

_body = _body.Replace("##" + _variableName.ToUpper() + "##", 
    templateVariables[_variableName])

Hello ## FirstName ## ## LastName ##,

3 个答案:

答案 0 :(得分:7)

字符串是不可变的,因此Replace函数不会修改调用它的字符串。您需要像在第二个示例中那样再次分配它。

正如其他人所指出的那样,ToUpper调用将确保变量名称不匹配。

答案 1 :(得分:2)

您在第二个例子中接到了.ToUpper()的电话。这是导致你看到的行为的原因吗?

答案 2 :(得分:2)

如果我理解正确的话: 您的第一个语句没有指定返回值,因为replace返回替换字符串的新实例。

_body = _body.Replace("##" + _variableName + "##",
    templateVariables[_variableName]);

应该在那里修复你。

变量获取的第二个实例更改了ToUpper()和包含混合外壳值的实际字符串。

你的字符串应该是

Hello ##FIRSTNAME## ##LASTNAME##,