String.Format, выходящий из VB против C # - PullRequest
0 голосов
/ 25 июня 2010

При поиске того, как избежать одиночной кавычки в String.Format, я нашел ответ в SO: Экранирование одинарной кавычки в 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 ]

6 голосов
/ 25 июня 2010

В C # строковые литералы могут содержать escape-последовательности, такие как \ n для новой строки или \ t для табуляции или \ "для кавычки. Если вам не нужен экранирование, вы можете поставить префикс @ с помощью префикса (например, : @"MMM ...") и получить ту же строку VB.

В VB экранирование никогда не допускается, поэтому нет необходимости экранировать обратную косую черту.

1 голос
/ 25 июня 2010

В c # \ вырвется.Ваш текст станет "МММ д \ 'уу" на "Ч: ммм".Вам не нужно экранировать символ 'в строке.Если бы вы использовали «в строке с другой стороны, вам нужно было бы экранировать его, чтобы не заканчивать строку« MMM d \ "yy \» в \ "H: mmm".Или вы также можете использовать строковый метод @ "", который автоматически будет экранировать символы для вас (но не "."

1 голос
/ 25 июня 2010

В C # обратная косая черта имеет значение (\ n - новая строка \ t tab ....).Таким образом, backlslahs itselft - это escape-символ, от которого вы должны уйти :) Или поместите AT-знак перед строкой - это делает «не экранированную строку» (обычно используется для путей)

1 голос
/ 25 июня 2010

Причина в том, что C # поддерживает escape-последовательности в строковых литералах через символ \. У VB нет таких экранирующих механизмов, и поэтому один \ интерпретируется как \.

В C # вы можете получить то же поведение, используя дословные строки

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