C# 11 Raw String Literals报错:行首空格与闭合行不一致排查
C# 11 原始字符串字面量(Raw String Literals)用法与错误排查
错误原因
你遇到的报错Line does not start with the same whitespace as the closing line of the raw string literal,本质是原始字符串内部的行缩进和闭合引号所在行的缩进不匹配。
看你的代码:
_logger.LogCritical($""" new value: {value} computed new value : {value / 100} old value: {UwpMediaPlayer.Volume} """);
闭合的三个引号前面有空格,但内部的new value:行是顶格的,两者缩进不一致,所以触发了错误。
正确写法示例
写法1:统一缩进匹配
把内部内容的缩进调整成和闭合引号相同的空格数:
_logger.LogCritical($""" new value: {value} computed new value : {value / 100} old value: {UwpMediaPlayer.Volume} """);
或者反过来,去掉闭合引号前的空格,让内容行也顶格:
_logger.LogCritical($""" new value: {value} computed new value : {value / 100} old value: {UwpMediaPlayer.Volume} """);
写法2:利用自动截断缩进(推荐)
C# 11支持自动去除所有内容行的共同最小缩进,你可以让内容保持统一缩进,闭合引号单独顶格:
_logger.LogCritical($""" new value: {value} computed new value : {value / 100} old value: {UwpMediaPlayer.Volume} """);
这种写法下,输出的字符串会自动去掉每一行前的4个空格(所有行的共同最小缩进),最终输出内容和顶格写的效果一致。
核心规则
- 原始字符串开头的三个引号后可以直接写内容,也可以换行
- 换行写内容时,要么所有内容行和闭合引号行缩进完全一致;要么利用共同缩进自动截断特性,让闭合引号顶格,内容行保持统一缩进
- 插值表达式
{}可以直接在原始字符串中使用,无需转义
内容的提问来源于stack exchange,提问作者Rafi Henig
相关产品推荐
相关产品推荐

