有一个简单的方法来创建一个多行字符串文字在c# ?

这是我现在拥有的:

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

我知道PHP

<<<BLOCK

BLOCK;

c#有类似的东西吗?


当前回答

我发现使用字符串文字的问题是,它会让你的代码看起来有点“奇怪”,因为为了在字符串本身中不获得空格,它必须完全左对齐:

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

讨厌的东西。

因此,我喜欢使用的解决方案是:

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

当然,如果您只是想在逻辑上拆分SQL语句的行,而实际上并不需要新的行,那么您总是可以替换Environment。换行" "。

其他回答

在c# 11[2022]中,您将能够使用原始字符串字面量。 Raw String Literals的使用使得使用“字符”更容易,而不必编写转义序列。

OP的解决方案:

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

string query2 = """
    SELECT foo, bar
    FROM table
    WHERE id = 42
    and name = 'zoo'
    and type = 'oversized "jumbo" grand'
    """;

更多关于原始字符串字面量的细节

参见原始字符串字面量GitHub问题的全部细节;和博客文章c# 11预览更新-原始字符串文字,UTF-8和更多!

你可以在字符串前面使用@符号来形成一个逐字逐句的字符串字面量:

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

使用此方法时,您也不必转义特殊字符,除了Jon Skeet的回答中所示的双引号。

它在c#中被称为逐字字符串字面量,只是在字面量之前加上@的问题。这不仅允许多行,而且还关闭了转义。例如,你可以这样做:

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

但是,这包括字符串中的换行符(使用源代码中的任何换行符)。对于SQL来说,这不仅无害,而且可能提高了在任何地方看到字符串的可读性——但在其他地方可能不需要它,在这种情况下,您要么不需要使用多行逐字字符串文字开始,要么从结果字符串中删除它们。

唯一的转义是,如果你想要一个双引号,你必须添加一个额外的双引号符号:

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

namespace Demo {

   class Program {

      static void Main(string[] args) {
         string str = @"Welcome User,
         Kindly wait for the image to
         load";

         Console.WriteLine(str);
      }
   }
}

输出

Welcome User,
Kindly wait for the image to
load

我还没有见过这个,所以我会张贴在这里(如果你有兴趣传递一个字符串,你也可以这样做)。其思想是,您可以将字符串分成多行,并以您希望的任何方式添加自己的内容(也在多行上)。这里“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
                                )";
    }