You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用字符串方法后值未变化,Replace替换失效是什么原因?

问题原因
  • C#中字符串的Replace方法默认是区分大小写匹配子串的,你执行myName = myName.ToUpper();之后,myName的值已经从初始的"Jhon"转为全大写的"JHON"。
  • 后续执行Replace("Jhon", "doe")时,要匹配的目标子串是大小写混合的"Jhon",和当前myName中存储的"JHON"大小写完全不匹配,因此匹配失败,Replace方法直接返回原字符串,没有发生替换操作。
  • 之后再次调用的ToUpper方法处理已经是全大写的字符串,不会产生任何变化,因此最终两次输出的内容都是Hello JHON。
修复方案

方案1:调整操作顺序,先替换再统一转大写

优先执行替换操作,再统一处理大小写,避免大小写不匹配的问题:

string myName = "Jhon";
// 先替换子串,再统一转为大写
myName = myName.Replace("Jhon", "doe").ToUpper();

Console.WriteLine($"Hello {myName}");
// 输出:Hello DOE

方案2:匹配全大写的目标子串

如果需要先执行转大写操作,把Replace方法的目标匹配子串改为全大写即可:

string myName = "Jhon";
myName = myName.ToUpper();
// 匹配全大写的"JHON"
myName = myName.Replace("JHON", "doe").ToUpper();

Console.WriteLine($"Hello {myName}");
// 输出:Hello DOE

方案3:使用忽略大小写的重载替换方法

如果需要保留先转大写的逻辑,同时不需要修改匹配子串的大小写,可以使用支持StringComparison参数的Replace重载(.NET Core 2.1+、.NET 5+ 及更高版本支持):

string myName = "Jhon";
myName = myName.ToUpper();
// 忽略大小写匹配子串
myName = myName.Replace("Jhon", "doe", StringComparison.OrdinalIgnoreCase).ToUpper();

Console.WriteLine($"Hello {myName}");
// 输出:Hello DOE

内容的提问来源于stack exchange,提问作者harsha_wije97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:36:04