2012-03-15 91 views
4

我收到一個消息和一個Priority枚舉並返回一個格式化的字符串的方法。對齊字符串string.Format()

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

Priority有三個可能的值:HighMediumLow

我使用string.Format的對齊選項,以便輸出看起來不錯。什麼想我輸出的樣子是這樣的:

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

然而,什麼我得到的是:

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

我明白爲什麼會這樣,但想什麼,我要知道是否有一種簡單(並且正確)的方式來通過使用string.Format並且不引入任何新變量來獲得想要的輸出。

+0

爲什麼不直接將串聯「*」+優先級+「*」' – musefan 2012-03-15 08:41:46

回答

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 2012-03-15 08:47:52

+0

我希望有辦法通過修改第一個參數只是以某種方式,作爲*添加到第二個pa rameter使得理解什麼是最終輸出會有點混亂。 – 2012-03-15 08:48:21

+0

萊斯特,除非你重寫'優先級'類/結構上的'ToString()'這是不可能的,我擔心。如果它是一個枚舉,那麼就更不用說了(除非你用隱式轉換運算符和一個自定義的'ToString()'創建一個包裝類。格式化字符串幾乎不是圖靈完備的,或者打算作爲通用模板引擎。 – Joey 2012-03-15 08:51:51

1

你能放大第一列8個空格?如果是的話......

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