1

我正在使用 C# 将两个字符串与转义序列连接起来,我想跳过这两个字符串,所以我在每个字符串之前使用 @ 符号。它看起来像这样:

string firstString = @"Use \n for line break. ";
string secondString = @"Use \b for backspace";
return firstString + secondString;

问题是:在返回值中是否会跳过转义序列?

4

4 回答 4

2

@""是一个逐字字符串,将转义序列视为文字。

所以\n \b会被逃脱并保持原样..

于 2013-11-07T09:38:17.453 回答
2

其他答案当然是正确的。为了说清楚;

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是退格转义序列。对于所有列表,请查看;

于 2013-11-07T09:45:19.840 回答
1

不,它只会将它们打印出来,因为由于“@”符号,它们被视为普通文本。

你为什么不直接运行代码呢?

于 2013-11-07T09:39:07.863 回答
0

firstString + secondString是一个捷径String.Concat(firstString, secondString)

Concat()方法只是按原样连接两个字符串。它不解释他们的内容。所以反斜杠字符会留在那里。

于 2013-11-07T09:51:15.263 回答