使逐字字符串文字自动缩进以保持与附近代码保持一致

时间:2016-03-16 16:19:43

标签: c# string visual-studio-2013 auto-indent autoformatting

在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 =( " 
        ; 
    
  • 因为通过在每行的左侧添加新的空格来缩进多行逐字字符串文字“增长字符串”,我意识到there are some verbatim string literals where this would not be desirable。如果在Visual Studio中全局设置此行为会通过缩进其他不应该使用的逐字字符串文字而导致意外后果,是否有办法在代码中标记单个逐字字符串文字,以便它们自动缩进而其他所有字符串文字不

1 个答案:

答案 0 :(得分:0)

通过更改“缩进”设置,我能够使VS2017以这种方式运行。我更改的是在工具-> 选项-> 文本编辑器-> C#-> 标签。该屏幕顶部是标题为“缩进”的部分。将其从“智能”更改为“阻止”所产生的行为类似于VS2010开箱即用的方式(至少对我而言)。

我刚刚进行了此更改,所以我不确定对其他类型的缩进的全部含义,但是对于逐字字符串来说,它似乎是可行的。