Экранирование одиночной кавычки в String.Format()

Я облазил все каналы и не могу понять этого. Может быть просто.

Следующий String.Format вызов:

return dt.ToString("MMM d yy 'at' H:mmm");

Правильно возвращает это:

23 сен 08 в 12:57

Теперь предположим, что я хочу добавить одну кавычку перед годом, чтобы вернуть это:

23 сен.

Поскольку одинарная кавычка является зарезервированным escape-символом, как мне экранировать одинарную кавычку, чтобы она отображалась?

Я пробовал двойные, тройные и четверные одинарные кавычки, но безуспешно.


person Jeff Atwood    schedule 29.08.2009    source источник


Ответы (3)


Вы можете избежать его, используя обратную косую черту, которую вам придется экранировать. Либо

return dt.ToString(@"MMM d \'yy 'at' H:mmm");

or

return dt.ToString("MMM d \\'yy 'at' H:mmm");
person Martin Liversage    schedule 29.08.2009
comment
в свою защиту, я был очарован тем, как вы должны делать {{{, чтобы избежать кудряшек в String.Format(), и временно потерял рассудок.. спасибо! - person Jeff Atwood; 29.08.2009
comment
В этом случае символы % не нужны, так как %d и %H сочетаются с другими шаблонами формата. Без них немного понятнее. - person David Glenn; 29.08.2009
comment
@Martin Мартин, я не знаю, связано ли это или мне следует открыть новый вопрос, но как мне заставить это работать? <asp:Label ID="Label1" runat="server" Text='<%# Eval("MyDate", "{0:MMM d yy 'at' H:mmm}")%>'> в настоящее время я получаю сообщение об ошибке, я думаю, потому что кавычки 'at' - person thx0125; 14.12.2017
comment
неважно, я нашел решение здесь https://stackoverflow.com/questions/264414/how-to-use-single-quotes-in-eval-format-string - person thx0125; 14.12.2017

Вы можете просто использовать объект HTML, если он для HTML.

-- Редактировать

&#39;

-- Редактировать

Просто чтобы этот пост не был ошибочным, как все остальные отметили, побег работает нормально :)

string s = t.ToString("MMM d \\'yy 'at' H:mmm");

И это последний раз, когда я не тестирую что-то на основе того, кто публикует :)

person Noon Silk    schedule 29.08.2009

Мне не нравятся строки С# @, если мне действительно не нужно их использовать, поэтому я бы действительно пошел с этим.

return dt.ToString("MMM d \\'yy 'at' H:mmm");

Это просто предпочтение, которое вам легче «читать».

person Robin Day    schedule 29.08.2009
comment
Попробуйте написать модульный тест, который проверяет класс, который обнаруживает экранированные символы и обрабатывает их. Вы очень скоро полюбите @strings. - person Jeff Tucker; 29.08.2009
comment
После 5 минут написания регулярных выражений я тоже полюбил @строки. :-) - person Christian Hayter; 03.09.2009