有一个简单的方法来创建一个多行字符串文字在c# ?
这是我现在拥有的:
string query = "SELECT foo, bar"
+ " FROM table"
+ " WHERE id = 42";
我知道PHP
<<<BLOCK
BLOCK;
c#有类似的东西吗?
有一个简单的方法来创建一个多行字符串文字在c# ?
这是我现在拥有的:
string query = "SELECT foo, bar"
+ " FROM table"
+ " WHERE id = 42";
我知道PHP
<<<BLOCK
BLOCK;
c#有类似的东西吗?
当前回答
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
其他回答
另一个需要注意的问题是在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)
我还没有见过这个,所以我会张贴在这里(如果你有兴趣传递一个字符串,你也可以这样做)。其思想是,您可以将字符串分成多行,并以您希望的任何方式添加自己的内容(也在多行上)。这里“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
)";
}
它在c#中被称为逐字字符串字面量,只是在字面量之前加上@的问题。这不仅允许多行,而且还关闭了转义。例如,你可以这样做:
string query = @"SELECT foo, bar
FROM table
WHERE name = 'a\b'";
但是,这包括字符串中的换行符(使用源代码中的任何换行符)。对于SQL来说,这不仅无害,而且可能提高了在任何地方看到字符串的可读性——但在其他地方可能不需要它,在这种情况下,您要么不需要使用多行逐字字符串文字开始,要么从结果字符串中删除它们。
唯一的转义是,如果你想要一个双引号,你必须添加一个额外的双引号符号:
string quote = @"Jon said, ""This will work,"" - and it did!";
我发现使用字符串文字的问题是,它会让你的代码看起来有点“奇怪”,因为为了在字符串本身中不获得空格,它必须完全左对齐:
var someString = @"The
quick
brown
fox...";
讨厌的东西。
因此,我喜欢使用的解决方案是:
var someString = String.Join(
Environment.NewLine,
"The",
"quick",
"brown",
"fox...");
当然,如果您只是想在逻辑上拆分SQL语句的行,而实际上并不需要新的行,那么您总是可以替换Environment。换行" "。
你可以在字符串前面使用@符号来形成一个逐字逐句的字符串字面量:
string query = @"SELECT foo, bar
FROM table
WHERE id = 42";
使用此方法时,您也不必转义特殊字符,除了Jon Skeet的回答中所示的双引号。