有沒有一種簡單的方法能夠在C#中建立多行字符串文字? ui
這是我如今所擁有的: this
string query = "SELECT foo, bar" + " FROM table" + " WHERE id = 42";
我知道PHP有 spa
<<<BLOCK BLOCK;
C#是否有相似的東西? code
您能夠在string
前面使用@
符號來造成逐字字符串文字 : orm
string query = @"SELECT foo, bar FROM table WHERE id = 42";
使用此方法時,除了雙引號(如Jon Skeet的答案所示)外,您也沒必要轉義特殊字符 。 ip
它在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!";
要注意的另外一個陷阱是在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)
我發現使用字符串文字的問題在於,它會使您的代碼看起來有些「 怪異 」,由於爲了避免在字符串自己中得到空格,必須將其徹底左對齊:
var someString = @"The quick brown fox...";
uck
所以,我喜歡使用的解決方案使全部內容與其他代碼保持一致:
var someString = String.Join( Environment.NewLine, "The", "quick", "brown", "fox...");
固然,若是您只想按邏輯方式拆分SQL語句的行,而實際上並不須要新行,則始終能夠只將Environment.NewLine
替換爲" "
。
我尚未看到它,因此我將其發佈在這裏(若是您有興趣傳遞字符串,您也能夠這樣作。)這個想法是您能夠將字符串分解成多行並添加本身的內容(也多行)以您但願的任何方式。 在這裏,「 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 )"; }