【问题标题】:String.Format escaping VB vs C#String.Format 转义 VB vs C#
【发布时间】:2010-06-25 06:19:19
【问题描述】:
在搜索如何在 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#,但我不习惯编写它。
【问题讨论】:
标签:
c#
.net
vb.net
escaping
string.format
【解决方案1】:
在 C# 中,字符串文字可以包含转义序列,例如 \n 用于换行或 \t 用于制表符或 \" 用于引号。如果您不需要转义,您可以在文字前面加上 @(例如:@"MMM ...") 并在 VB 中获取相同的字符串。
在VB中,转义是不允许的,所以不需要转义反斜杠。
【解决方案2】:
原因是 C# 通过 \ 字符支持字符串文字中的转义序列。 VB 没有这样的转义机制,因此单个\ 被解释为\。
在 C# 中,您可以使用逐字字符串获得相同的行为
@"MMM d \'yy 'at' H:mmm"
【解决方案3】:
在 C# 中,反斜杠是有含义的(\n 是换行符 \t 制表符 ....)。
所以 backlslahs 本身是一个转义字符 - 你必须转义:)
或者在字符串前面放置一个 AT 符号 - 这会形成一个“非转义字符串”(通常用于路径)
【解决方案4】:
在 c# 中,\ 会转义。您的文本将变为“MMM d \'yy 'at' H:mmm”。您不需要转义字符串中的 ' 字符。另一方面,如果要在字符串中使用 ",则需要对其进行转义以不结束字符串 "MMM d \"yy \"at\" H:mmm"。或者你也可以使用 @"" 字符串方法,它会自动为你转义字符(不是 " )。所以你可以写 @"this will not \n be two lines"