【问题标题】: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"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-06-17
          • 2017-06-08
          • 1970-01-01
          • 2011-06-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多