簡體   English   中英

使逐字字符串文字自動縮進以保持與附近代碼保持一致

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM