Как поместить необработанные (экранированные) слова внутри String.Format
Я форматирую дату:
str = String.Format("{0:MMM d m:mm"+yearStr+"}", dt);
Я хочу поставить слово "at" после "d", но я не хочу, чтобы строка отформатировала его. Я просто хочу слово "at".
Как я могу это достичь?
Ответ 1
Вы можете окружать литеральные строки кавычками, которые для более длинных строк, вероятно, проще и немного более читабельны, чем экранирование каждого символа с обратной косой чертой:
str = String.Format("{0:MMM d 'at' m:mm"+yearStr+"}", dt);
string.Format(@"{0:MMM d \a\t m:mm" + yearStr + "}", dt);
Обратите внимание на двойное экранирование - я использовал строку varbatim, поэтому я смог написать \ внутри строки как обычный символ. Процедура форматирования для DateTime затем интерпретирует это (снова) как escape-последовательность.
Вот более простой вариант:
string.Format("{0:MMM d} at {0:m:mm" + yearStr + "}", dt);
Первый вариант может считаться отвратительным для некоторых. Тем не менее, последнее очень ясно читать.
Ответ 3
Просто для удовольствия, но работает.
var what=new object[] { "{{{{0:MMM d}}}} {0} {{{{0:m:mm:{{0}}}}}}", "at", yearStr, dt };
var that=what.Aggregate((a, b) => String.Format((String)a, b));
Вы можете объединить две строки в одну. Параметр at, который вы хотите установить между двумя форматами.