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

C#配置取值拼接插值字符串后转义导致变量无法解析的问题

解决C#插值字符串转义后变量无法解析的问题

哦,这个问题我之前也碰到过!核心是你搞错了C#插值字符串里的引号转义方式,导致插值功能直接失效了。让我给你理清楚问题所在,以及正确的解决办法:

问题根源

你写的$\"Lorem ipsum {_confi.value}...\"其实是错误的写法——当你在$后面加反斜杠转义引号时,等于把插值前缀$和字符串字面量断开了,编译器会把整个内容当成普通字符串,自然不会解析里面的{_confi.value}和{_config.value2}变量。

正确的解决方案

在C#的插值字符串(以$开头的字符串)中,要包含双引号的话,应该用两个连续的双引号来转义,而不是反斜杠。这样既可以正确插入引号,又不会破坏插值功能。

示例1:在字符串内部包含引号

如果你想让最终字符串里包含变量的引号包裹,比如Lorem ipsum "配置值1" bla bla bla "配置值2",可以这么写:

_confi = new Config();
Configuration.GetSection("Config").Bind(_confi);
// 用两个""转义双引号,同时保留插值解析
string mySuperComplicatedString = $"Lorem ipsum \"{_confi.value}\" bla bla bla \"{_config.value2}\"";

示例2:给整个插值字符串包裹外层引号

如果你的需求是让最终字符串本身被双引号包裹(比如输出JSON格式的字符串),比如"Lorem ipsum 配置值1 bla bla bla 配置值2",代码应该是:

string quotedInterpolatedString = $"\"Lorem ipsum {_confi.value} bla bla bla {_config.value2}\"";

示例3:逐字插值字符串的情况

如果你同时需要逐字字符串(保留换行、空格,不转义反斜杠)和插值功能,记得把$和@放在一起(顺序不影响),转义引号依然用两个双引号:

string verbatimInterpolated = $@"
这是一个带换行的逐字插值字符串,
包含""双引号""和变量值:{_confi.value}
";

总结

记住C#插值字符串的核心规则:

  • 插值前缀$必须紧跟在字符串的起始引号前面,不能被反斜杠隔开
  • 字符串内部的双引号用两个连续的""转义,而非\"

这样就能同时实现引号转义和变量插值的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:33:47