C#插值原始字符串字面量中如何嵌入大括号?
问题原因
你使用单个$前缀的插值原始字符串($""")时,单个{会触发插值逻辑。当你写{{Qux}}时,第一个{启动插值,第二个{被视为插值表达式的一部分,但后续没有匹配的}结束插值,因此触发CS9006错误。
解决方案
调整$前缀的数量,让触发插值所需的连续{数量大于你要输出的字面量{数量,同时对应调整插值表达式的包裹方式:
方法一(推荐,匹配你的需求)
使用3个$前缀($$$"""),此时只有连续3个{才会触发插值,连续2个{会被直接当作字面量输出。插值bar变量时,用3个{和3个}包裹表达式:
var bar = "Bar"; var s = $$$""" Foo {{{bar}}} Baz {{Qux}} """; Console.WriteLine(s);
输出结果完全符合预期:
Foo Bar Baz {{Qux}}
方法二(适用于其他场景)
如果只使用2个$前缀($$"""),此时连续2个{触发插值,单个{是字面量。若Qux是字面量,要输出{{Qux}}需拆分写法,同时用{{bar}}实现插值:
var bar = "Bar"; var s = $$""" Foo {{bar}} Baz {{}{{Qux}}{}} """;
这种写法相对繁琐,仅适合需要单个字面量{的场景,因此方法一更适配你的需求。
核心规则
插值原始字符串的$前缀数量k决定了:
- 连续
k个{:启动插值表达式,直到遇到连续k个}结束,替换为表达式的值 - 少于
k个的连续{/}:直接作为字面量输出
内容的提问来源于stack exchange,提问作者lonix
相关产品推荐
相关产品推荐

