2016-11-14 3 views
1

Я хочу интерполировать не только токены в строке, но и сам формат. Вот пример использования string.Format который загружает строку формата из локальных переменных:Строки интерполирующего формата в интерполированных строках

object boxedDate = DateTime.Today; 
var dateFormat = "MM-dd-yyyy"; 
var dateString = string.Format($"{{0:{dateFormat}}}", boxedDate); 

С интерполируемым синтаксисом строки, хотя, кажется, что формат часть строки является чисто буквальной. Понятно, что я хотел бы сделать что-то вроде этого:

dateString = $"{boxedDate:{dateFormat}}"; 

Не работает, конечно. Я знаю, что я мог бы распаковывать на DateTime и вызывать .ToString() так:

dateString = $"{((DateTime)boxedDate).ToString(dateFormat)}"; 

... но это требует от меня, чтобы знать тип во время выполнения. Это может быть десятичное целое число, дата и т. Д.

Это не прерыватель сделки или что-то еще. Я всегда мог использовать string.Format, если нет реального способа сделать это с помощью интерполированного синтаксиса строк.

ответ

1

Я думаю, что нет возможности узнать, как выбрать подходящий формат - или некоторую логику преобразования. Тип FormattableString может помочь вашему делу немного.

var lcid = "en-US"; 
FormattableString f = $"{model.Date:D}"; 
var s = f.ToString(new CultureInfo(lcid)); 

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

Помимо этого, да, я думаю, что ваши лучшие ставки - ToString и string.Format.

Смежные вопросы