2012-03-15 49 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); 
}