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
相关产品推荐
相关产品推荐

