0

在搜索如何在 String.Format 中转义单引号时,我在SO:Escaping single quote in String.Format() 中找到了答案

不过对于VB来说似乎有所不同。我测试过了,确实C#需要

string s = DateTime.Now.ToString("MMM d \\'yy 'at' H:mmm");

而VB需要

Dim s As String = Now.ToString("MMM d \'yy 'at' H:mmm")

为什么 C# 需要双反斜杠,而 VB 需要单反斜杠?对于 C# 用户来说,这可能是一个有点愚蠢的问题,但是虽然我可以阅读 C#,但我不习惯编写它。

4

4 回答 4

7

在 C# 中,字符串文字可以包含转义序列,例如 \n 用于换行或 \t 用于制表符或 \" 用于引号。如果您不需要转义,您可以在文字前加上 @(例如:)@"MMM ..."和得到相同的字符串一个VB。

在 VB 中,从不允许转义,因此不需要转义反斜杠。

于 2010-06-24T22:16:01.727 回答
1

原因是 C# 通过\字符支持字符串文字中的转义序列。VB 没有这样的转义机制,因此单曲\被解释为\.

在 C# 中,您可以通过使用逐字字符串获得相同的行为

@"MMM d \'yy 'at' H:mmm"
于 2010-06-24T22:16:16.027 回答
1

在 C# 中,反斜杠是有含义的(\n 是换行符 \t 制表符 ....)。所以 backlslahs 本身是一个转义字符 - 你必须转义:) 或者在字符串前面放置一个 AT 符号 - 这会形成一个“非转义字符串”(通常用于路径)

于 2010-06-24T22:17:28.457 回答
1

在 c# 中,\ 将转义。您的文本将变为“MMM d \'yy 'at' H:mmm”。您不需要转义字符串中的 ' 字符。另一方面,如果要在字符串中使用 ",则需要将其转义以不结束字符串 "MMM d \"yy \"at\" H:mmm"。或者你也可以使用 @"" 字符串方法,它会自动为你转义字符(不是 " )。所以你可以写 @"this will not \n be two lines"

于 2010-06-24T22:19:19.027 回答