我正在将一个古老的VB6程序转换为C#,我遇到了一些看起来像这样的VB6代码...
   Format(part(PI).far_xdev, " #0.000;-#0.000")
起初我对用分号分隔的两个格式字段感到困惑.但事实证明,在VB6中,这意味着如果被格式化的数字的值为0或正数,则它使用第一个,如果是负数,则使用第二个.如果有三个格式化字段,则为正,负和零; 四个是正面,负面,零和零.
在C#字符串格式中,这相当于什么?我怎么说"将这个格式化字符串用于正数,而将其用于负数"?
(对于任何添加"此问题可能已经有答案"的人:该链接的问题是链接问题是在参考某些版本的BASIC(基于语法)时提出的,并没有明确说明他正在寻找一个在C#中回答,并且两个答案都没有明确说明它们是在C#中.我们只能根据标签猜测所涉及的语言.我认为这个新问题和得到的答案更清晰,明确和详细)
通过半列使用相同的分隔.在msdn上阅读有关该分隔符的更多信息(最多支持三个部分)
Console.WriteLine("{0:positive;negative;zero}", +1); //prints positive
Console.WriteLine("{0:positive;negative;zero}", -1); //prints negative
Console.WriteLine("{0:positive;negative;zero}", -0); //prints zero
您可以使用ToString数值并在那里传递格式
string formatted = 1.ToString("positive;negative;zero"); //will return "positive"
或使用string.Format评论部分中显示的内容.但是你仍然需要将订单位置传递{0}给它.
string formatted = string.Format("{0:positive;negative;zero}", 1); 
为了检查空,你可以使用空合并运算符(投地对象是必需的,因为没有隐式转换从int?到string).它变得相当混乱,所以我建议考虑简单的if语句.
int? v = null;
var formatted = string.Format("{0:positive;negative;zero}", (object) v ?? "null");