2010-06-24 88 views
0

雖然關於如何逃脫的String.Format一個單引號搜索,我找到了答案,在SO: Escaping single quote in String.Format()的String.Format逃逸VB VS C#

這似乎是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#,但我不習慣寫它。

+0

另外要指出的是,轉義反斜槓不是單引號 – 2010-06-24 22:18:27

回答

6

在C#中,字符串文字可以包含轉義序列,如\ n用於新行,\ t用於製表符或\「用於引號。如果您不需要轉義,則可以用@如:@"MMM ..."),並得到相同的字符串VB

在VB中,逃避永遠不會允許的,所以沒有必要轉義反斜線

1

這是爲什麼C#支持逃生的字符串中序列的原因。通過\字符VB沒有這樣的逃避機制,因此單個\被解釋爲\

在C#中,你可以通過使用逐字字符串

@"MMM d \'yy 'at' H:mmm" 
1

在C#中獲得相同的行爲反斜槓都有其意義(\ n是換行符\ t製表....)。 所以backlslahs本身是一個轉義字符 - 你必須逃避:) 或者在字符串前面放置一個AT符號 - 這會產生一個「非轉義字符串」(通常用於路徑)

1

在c#\會逃脫。您的文字將在'H:mmm'處變成「MMM d \'yy'」。你不需要逃避字符串中的字符。如果您要在字符串中使用「,則需要將其轉義爲不會在\」H:mmm「處結束字符串」MMM d \「yy \」。或者你也可以使用@「」字符串方法,它會自動爲你轉義字符(不是「),所以你可以寫@」這不會是兩行「