String.Format转义VB vs C#

时间:2010-06-24 22:12:13

标签: c# .net vb.net escaping string.format

在搜索如何在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 个答案:

答案 0 :(得分:6)

在C#中,字符串文字可以包含转义序列,例如\ n表示新行,\ t表示选项卡或\“表示引号。如果不需要转义,可以在文字前加上@(例如:@"MMM ...")并获得相同的字符串VB。

在VB中,永远不允许转义,因此无需转义反斜杠。

答案 1 :(得分:1)

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

在C#中,您可以使用逐字字符串

获得相同的行为
@"MMM d \'yy 'at' H:mmm"

答案 2 :(得分:1)

在C#中,反斜杠有一个含义(\ n是换行符\ t tab ....)。 所以backlslahs itselft是一个逃脱角色 - 你必须逃脱:) 或者在字符串前放置一个AT符号 - 这会产生一个“非转义字符串”(通常用于路径)

答案 3 :(得分:1)

在c#\中会逃脱。你的文字将在'H:mmm'变成“MMM d \'yy'。您不需要转义字符串中的'字符。如果你在另一方面使用“in the string,你需要将它转义为不结束你的字符串”MMM d \“yy \”at \“H:mmm”。或者你也可以使用@“”字符串方法,它会为你自动转义字符(不是“虽然”。所以你可以写@“这不会是两行”