C#是否等效于此VB6字符串格式?

C#是否等效于此VB6字符串格式?,c#,vb6-migration,C#,Vb6 Migration,我正在把一个古老的VB6程序转换成C#我遇到了一些看起来像这样的VB6代码 Format(part(PI).far_xdev, " #0.000;-#0.000") 起初,我对用分号分隔的两个格式字段感到困惑。但事实证明,在VB6中,这意味着如果正在格式化的数字的值为0或正,则使用第一个,如果为负,则使用第二个。如果有三个格式字段,则为正、负和零;四个是正、负、零和零 这在C#字符串格式中的等价物是什么?我怎么说“用这个格式化字符串表示正数,用那个格式化字符串表示负数” (对于添加“此问

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

   Format(part(PI).far_xdev, " #0.000;-#0.000")
起初,我对用分号分隔的两个格式字段感到困惑。但事实证明,在VB6中,这意味着如果正在格式化的数字的值为0或正,则使用第一个,如果为负,则使用第二个。如果有三个格式字段,则为正、负和零;四个是正、负、零和零

这在C#字符串格式中的等价物是什么?我怎么说“用这个格式化字符串表示正数,用那个格式化字符串表示负数”


(对于添加“此问题可能已经有答案”的人:该链接的问题是,该链接的问题是在参考某个版本的BASIC(基于语法)时提出的)他没有明确地说他在用C#寻找答案,而且给出的两个答案也没有明确地说他们是用C#。我们只能根据标签来猜测所涉及的语言。我认为这个新问题和由此产生的答案更加清晰、明确和详细)

使用相同的半柱分离。阅读有关该分隔符的更多信息(最多支持三个部分)

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

string formatted = 1.ToString("positive;negative;zero"); //will return "positive"
或者使用注释部分所示的
string.Format
。但仍然需要将订单位置
{0}
传递给它

string formatted = string.Format("{0:positive;negative;zero}", 1); 
为了检查null,您可以使用null合并运算符(强制转换为对象是必需的,因为没有从
int?
字符串的隐式强制转换)。它变得相当混乱,所以我建议考虑简单的if语句。

int? v = null;
var formatted = string.Format("{0:positive;negative;zero}", (object) v ?? "null");
C#支持相同的自定义格式:

string.Format("{0:#0.000;-#0.000}",part(PI).far_xdev);
请注意,您使用的格式与标准定点格式相同,有3个有效数字:

string.Format("{0:F3}",part(PI).far_xdev);

可能重复的
string.Format(“{0:positive;negative;zero}”,…)
可能会更多helpful@JeremyCook也许最好使用
ToString
来避免
{0}
ToString
在这种情况下似乎很好。我建议使用
string.Format
,因为这是一种通用解决方案,即使格式化的值为
null
,它也能工作。我从来不知道C支持这一点。真是个惊喜。
string.Format("{0:F3}",part(PI).far_xdev);