C#中的多行字符串文字

ε祈祈猫儿з 提交于 2019-12-14 18:42:21

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

有没有一种简单的方法可以在C#中创建多行字符串文字?

这是我现在所拥有的:

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

我知道PHP有

<<<BLOCK

BLOCK;

C#是否有类似的东西?


#1楼

您可以在string前面使用@符号来形成逐字字符串文字

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

使用此方法时,除了双引号(如Jon Skeet的答案所示)外,您也不必转义特殊字符


#2楼

它在C#中称为逐字字符串文字 ,只是在文字之前加上@即可。 这不仅允许多行,而且还关闭转义。 因此,例如,您可以执行以下操作:

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

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

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

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

#3楼

要注意的另一个陷阱是在string.Format中使用字符串文字。 在这种情况下,您需要将花括号/括号“ {”和“}”转义。

// 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
                                )";
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!