[英]Make verbatim string literals auto-indent to stay aligned with nearby code
在C#中,我经常使用逐字字符串文字(例如, @"Arrr!"
)来跨越多行来打破长字符串,同时保留布局。 例如,我使用它来分解内联SQL,如下所示:
var sqlString = @"
SELECT
Column1
, ...
FROM
Table1 INNER JOIN ...
WHERE
Column2 = @Value2
, ...
";
...或者打破这样的正则表达式:
var regexPattern = @"
(?<state>\w+)[.]? (?#*** Matches state {optionally having a period at the end} ***)
(\s+|,|,\s+|\s*\u2022\s*) (?#*** Matches space between state and zip {can include a comma or bullet point} ***)
(?<zip>(\d{5}-\d{4}\b|\d{5}(?![\w-]))) (?#*** Matches zip code ***)
";
但是,如果此代码稍后自动缩进,则逐字字符串文字不会自动缩进。 当它上方和下方的代码行向右移动时,它会被遗忘。 结果是它与其他一切都不一致。 例如:
之前:
verbatim = @" ___
I likes my |
strings purty | indented the way I like!
"; ___|
fooBar = "nomnom";
围绕“IF”声明后:
if (true)
{
if (maybe)
{
verbatim = @" ___
I likes my |
strings purty | no longer indented the way I like =(
"; ___|
fooBar = "nomnom";
}
}
我如何使Visual Studio自动缩进我的逐字字符串文字的行,就像它与其他代码行一样?
笔记
我不想在每一行上使用普通字符串并将它们连接在一起就像这样(这是我过去常常这样做但我发现自由格式的逐字字符串文字更容易阅读和修改):
notverbatim = "Alas! " + "This doth " + "make me sad =( " ;
因为通过在每行的左边添加新的空格来缩进多行逐字字符串文字“增长字符串”,我意识到有一些逐字字符串文字,这是不可取的 。 如果在Visual Studio中全局设置此行为会通过缩进不应该的其他逐字字符串文字而导致意外后果,是否有一种方法可以在代码中标记单个逐字字符串文字,以便它们自动缩进而其他所有字符串文字不?
通过更改“缩进”设置,我能够让VS2017以这种方式运行。 我更改的是工具 - > 选项 - > 文本编辑器 - > C# - > 选项卡 。 在该屏幕的顶部是标题为缩进的部分。 将其从“智能”更改为“阻止”导致的行为类似于VS2010的开箱即用(至少对我而言)。
我只是做了这个改变所以我不确定其他类型的缩进的全部含义,但对于逐字字符串它似乎工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.