C# 使逐字字符串文本自动缩进,以与附近的代码保持一致
在C#中,我经常使用逐字字符串文本(例如,C# 使逐字字符串文本自动缩进,以与附近的代码保持一致,c#,string,visual-studio-2013,auto-indent,autoformatting,C#,String,Visual Studio 2013,Auto Indent,Autoformatting,在C#中,我经常使用逐字字符串文本(例如,@“Arrr!”)在保留布局的同时跨多行打断长字符串。例如,我使用它分解内联SQL,如下所示: var sqlString = @" SELECT Column1 , ... FROM Table1 INNER JOIN ... WHERE Column2 = @Value2 , ... "; var regexPattern = @"
@“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 ***)
";
…或分解如下正则表达式模式:
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 ***)
";
在使用“如果”语句后:
if (true)
{
if (maybe)
{
verbatim = @" ___
I likes my |
strings purty | no longer indented the way I like =(
"; ___|
fooBar = "nomnom";
}
}
如何使Visual Studio自动缩进逐字字符串文字的行,就像它对周围的其他代码行所做的那样?
注释
- 我不想在每一行上使用普通字符串并连接它们 所有这些都是这样的(我以前就是这样做的,但我发现 自由格式的逐字字符串文本更易于阅读和 修改):
- 因为缩进多行逐字字符串文字会通过在每行的左侧添加新的空白来“增加字符串”,我意识到。如果在Visual Studio中全局设置此行为会缩进其他不应该缩进的逐字字符串文字,从而导致意外后果,那么是否有方法在代码中标记单个逐字字符串文字,使它们自动缩进,而所有其他文字则不自动缩进
我只是做了这个更改,所以我不确定对其他类型缩进的全部影响,但对于逐字字符串来说,它似乎是有效的。我非常确定VS中没有任何内置内容允许这样做。您几乎必须编写某种类型的自定义插件。但是,您可以将字符串文字定义为常量变量,而这些常量变量不受实际使用位置格式的影响。您可以编写自己的VS扩展名来实现这一点。我怀疑VS是否内置了此功能。就我个人而言,我并不觉得手动高亮显示和制表很烦人。我没有一个好的答案,但是如果你将
+
移动到行尾,你可能会发现串联方法更可读。记住,使用的任何缩进空格都会变成,就像换行一样,字符串的一部分:因此没有内置任何以这种方式修改字符串的内容。@Richard True,正如我在文章末尾的第二个注释中提到的。但是,如果有某种方法可以将逐字字符串文字标记为“缩进的种类”,而将其他文字标记为“不缩进的种类”,那就太好了。也许现在没有这样的东西存在,但如果真的存在那就太好了!(像这样的帖子有时会导致新功能的增加,如果它们足够流行的话……但不确定这一个是不是)它在VS2015中对我不起作用。当我将缩进样式更改为“Block”,然后在现有逐字记录字符串周围放置一些大括号时,当我重新自动格式化时,该逐字记录字符串不会与其他代码一起自动向右缩进。即使它真的起作用了,我也无法忍受“块”缩进样式给其他所有东西带来的不便,因为我已经变得如此依赖“智能”缩进样式。这正是我想要的。在Visual Studio 2019 Professional中测试。不幸的是,VS不会自动正确地在具有该设置的示例代码块中缩进。它只是使用与前一行相同的缩进级别缩进每一行,因此如果创建新代码块,则必须手动添加缩进级别。因此,我现在将继续使用智能缩进。您可以检查。智能缩进符合配置的代码样式,因此您不必学习并手动维护所有缩进代码样式规则。块缩进只是机械地使用与前一行相同的缩进级别,这在逐字字符串中非常好,但在我看来,您会失去更重要的功能。