C#相当于这个VB6字符串格式?

use*_*117 2 c# vb6-migration

我正在将一个古老的VB6程序转换为C#,我遇到了一些看起来像这样的VB6代码...

   Format(part(PI).far_xdev, " #0.000;-#0.000")
Run Code Online (Sandbox Code Playgroud)

起初我对用分号分隔的两个格式字段感到困惑.但事实证明,在VB6中,这意味着如果被格式化的数字的值为0或正数,则它使用第一个,如果是负数,则使用第二个.如果有三个格式化字段,则为正,负和零; 四个是正面,负面,零和零.

在C#字符串格式中,这相当于什么?我怎么说"将这个格式化字符串用于正数,而将其用于负数"?

(对于任何添加"此问题可能已经有答案"的人:该链接的问题是链接问题是在参考某些版本的BASIC(基于语法)时提出的,并没有明确说明他正在寻找一个在C#中回答,并且两个答案都没有明确说明它们是在C#中.我们只能根据标签猜测所涉及的语言.我认为这个新问题和得到的答案更清晰,明确和详细)

Ily*_*nov 5

通过半列使用相同的分隔.在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
Run Code Online (Sandbox Code Playgroud)

您可以使用ToString数值并在那里传递格式

string formatted = 1.ToString("positive;negative;zero"); //will return "positive"
Run Code Online (Sandbox Code Playgroud)

或使用string.Format评论部分中显示的内容.但是你仍然需要将订单位置传递{0}给它.

string formatted = string.Format("{0:positive;negative;zero}", 1); 
Run Code Online (Sandbox Code Playgroud)

为了检查空,你可以使用空合并运算符(投地对象是必需的,因为没有隐式转换从int?string).它变得相当混乱,所以我建议考虑简单的if语句.

int? v = null;
var formatted = string.Format("{0:positive;negative;zero}", (object) v ?? "null");
Run Code Online (Sandbox Code Playgroud)

  • `string.Format("{0:positive; negative; zero}",...)`可能会更有帮助 (2认同)