2012-03-15 3 views
4

У меня есть метод, который получает сообщение и перечисление Priority и возвращает форматированную строку.Выравнивание строки с string.Format()

private string FormatMessage(string message, Priority priority) 
{ 
    return string.Format("*{0,-6}* - {1}", priority, message); 
} 

Priority имеет три возможных значения: High, Medium и Low.

Я использую опцию выравнивания string.Format так, чтобы результат выглядел красиво. То, что я хотел бы выход, чтобы посмотреть, как это:

*Low* - First message 
*Medium* - Second message 
*Low* - Third message 

Однако то, что я получаю это:

*Low * - First message 
*Medium* - Second message 
*Low * - Third message 

Я понимаю, почему это происходит, но то, что я хотел бы знать, есть ли простой (и правильный) способ получить желаемый вывод с помощью string.Format и без введения каких-либо новых переменных.

+0

Почему просто не сростить звезды вокруг значения приоритета ... '" * "+ priority +" * "' – musefan

ответ

10
string.Format("{0,-8} - {1}", "*" + priority + "*", message); 

Или, если вы чувствуете себя фантазии:

string.Format("{0,-8} - {1}", string.Format("*{0}*", priority), message); 
string.Format("{0,-8} - {1}", string.Join(priority, new [] {"*", "*"}), message); 
+0

не забудьте сделать -6 в -8 :) – bmkorkut

+0

Я надеялся, что был способ сделать это, изменив первый параметр только как-то, добавляя * к второму rameter делает это немного запутанным, чтобы понять, что будет в конечном итоге выходом. –

+0

Lester, если вы не переопределяете 'ToString()' на ваш 'Priority' класс/struct, это невозможно, я боюсь. Если это перечисление, то еще меньше (если вы не создаете класс упаковки с неявными операциями преобразования и пользовательский «ToString()»). Строки формата вряд ли являются Turing-complete или предназначены как универсальные шаблонные двигатели. – Joey

1

Могли бы вы увеличить первый столбец 8 пространств ?, если так ...

private string FormatMessage(string message, Priority priority) 
{ 
    return string.Format("{0,-8} - {1}", "*" + priority.ToString() + "*", message); 
} 
Смежные вопросы