C#中的多行字符串文字

有沒有一種簡單的方法能夠在C#中建立多行字符串文字? ui

這是我如今所擁有的: this

string query = "SELECT foo, bar"
+ " FROM table"
+ " WHERE id = 42";

我知道PHP有 spa

<<<BLOCK

BLOCK;

C#是否有相似的東西? code


#1樓

您能夠在string前面使用@符號來造成逐字字符串文字orm

string query = @"SELECT foo, bar
FROM table
WHERE id = 42";

使用此方法時,除了雙引號(如Jon Skeet的答案所示)外,您也沒必要轉義特殊字符ip


#2樓

它在C#中稱爲逐字字符串文字 ,只是在文字以前加上@便可。 這不只容許多行,並且還關閉轉義。 所以,例如,您能夠執行如下操做: 字符串

string query = @"SELECT foo, bar
FROM table
WHERE name = 'a\b'";

可是,這包括換行符(使用您的源使用的任何換行符)到字符串中。 對於SQL來講,這不只無害,並且可能會在您看到字符串的任何地方提升可讀性-但在其餘地方,則可能不須要它,在這種狀況下,您無需使用多行逐字字符串字面量,或從結果字符串中刪除它們。 get

轉義的惟一點是,若是要雙引號,則必須添加一個額外的雙引號: string

string quote = @"Jon said, ""This will work,"" - and it did!";

#3樓

要注意的另外一個陷阱是在string.Format中使用字符串文字。 在這種狀況下,您須要將花括號/括號「 {」和「}」轉義。 it

// this would give a format exception
string.Format(@"<script> function test(x) 
      { return x * {0} } </script>", aMagicValue)
// this contrived example would work
string.Format(@"<script> function test(x) 
      {{ return x * {0} }} </script>", aMagicValue)

#4樓

我發現使用字符串文字的問題在於,它會使您的代碼看起來有些「 怪異 」,由於爲了避免在字符串自己中得到空格,必須將其徹底左對齊:

var someString = @"The
quick
brown
fox...";

uck

所以,我喜歡使用的解決方案使全部內容與其他代碼保持一致:

var someString = String.Join(
    Environment.NewLine,
    "The",
    "quick",
    "brown",
    "fox...");

固然,若是您只想按邏輯方式拆分SQL語句的行,而實際上並不須要新行,則始終能夠只將Environment.NewLine替換爲" "


#5樓

我尚未看到它,因此我將其發佈在這裏(若是您有興趣傳遞字符串,您也能夠這樣作。)這個想法是您能夠將字符串分解成多行並添加本身的內容(也多行)以您但願的任何方式。 在這裏,「 tableName」能夠傳遞到字符串中。

private string createTableQuery = "";

    void createTable(string tableName)
    {

         createTableQuery = @"CREATE TABLE IF NOT EXISTS
                ["+ tableName  + @"] (
               [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
               [Key] NVARCHAR(2048)  NULL, 
               [Value] VARCHAR(2048)  NULL
                                )";
    }
相關文章
相關標籤/搜索