我正在使用 C# 将两个字符串与转义序列连接起来,我想跳过这两个字符串,所以我在每个字符串之前使用 @ 符号。它看起来像这样:
string firstString = @"Use \n for line break. ";
string secondString = @"Use \b for backspace";
return firstString + secondString;
问题是:在返回值中是否会跳过转义序列?
我正在使用 C# 将两个字符串与转义序列连接起来,我想跳过这两个字符串,所以我在每个字符串之前使用 @ 符号。它看起来像这样:
string firstString = @"Use \n for line break. ";
string secondString = @"Use \b for backspace";
return firstString + secondString;
问题是:在返回值中是否会跳过转义序列?
@""
是一个逐字字符串,将转义序列视为文字。
所以\n
\b
会被逃脱并保持原样..
其他答案当然是正确的。为了说清楚;
C# 规范的第 2.4.4.5 节对此进行了介绍:
2.4.4.5 字符串文字
C# 支持两种形式的字符串文字:常规字符串文字和逐字字符串文字。
常规字符串文字由用双引号括起来的零个或多个字符组成,如 "hello",并且可能包括简单的转义序列(如制表符的 \t)以及十六进制和 Unicode 转义序列。
逐字字符串文字由一个 @ 字符后跟一个双引号字符、零个或多个字符以及一个结束双引号字符组成。一个简单的例子是@"hello"。在逐字字符串文字中,分隔符之间的字符被逐字解释,唯一的例外是引号转义序列。特别是,简单的转义序列以及十六进制和 Unicode 转义序列不会在逐字字符串文字中进行处理。逐字字符串文字可能跨越多行。
因此,当您将其与 verbtaim 字符串文字一起使用时,例如;
string firstString = @"Use \n for line break. ";
string secondString = @"Use \b for backspace";
returns firstString + secondString;
结果将是;
Use \n for line break. Use \b for backspace
当您使用常规字符串文字时;
string firstString = "Use \n for line break. ";
string secondString = "Use \b for backspace";
returns firstString + secondString;
结果将是;
Use
for line break. Use for backspace
因为\n
是新行转义序列并且\b
是退格转义序列。对于所有列表,请查看;
不,它只会将它们打印出来,因为由于“@”符号,它们被视为普通文本。
你为什么不直接运行代码呢?
firstString + secondString
是一个捷径String.Concat(firstString, secondString)
该Concat()
方法只是按原样连接两个字符串。它不解释他们的内容。所以反斜杠字符会留在那里。