解释令人困惑的条件字符串格式

本文关键字:条件 字符串 格式 解释 | 更新日期: 2023-09-27 18:20:18

一位前同事写道:

String.Format("{0:#;;} {1:records;no records;record}", rows, rows - 1);
//Rows is a integer value

我读过像这样的文章

代码项目-.NET中的自定义字符串格式
MSDN-自定义数字格式字符串

但我仍然不明白这种格式是如何工作的。很明显,我能看到输出,但我不理解{0:#;;}和第二部分。我想做同样的事情来指定年龄(年,年…)

我对这种字符串格式很好奇。有人能解释这种行为吗?作者不再与我们合作了。

解释令人困惑的条件字符串格式

这基本上是一个自定义的数字格式字符串,但说实话,这是一个非常奇怪的字符串。事实上,这是其中的两个:

#;;
records;no records;record

在每种情况下,都有三个部分,因为有两个部分分隔符(分号):

第一部分适用于正值,第二部分适用于负值,第三部分适用于零。

由于开发人员使用rows - 1作为要由第二个格式字符串格式化的值,您的情况更加复杂,因此它实际上是:

  • 如果rows大于1,则为records(因此rows - 1为正)
  • 如果rows等于0,则为no records(因此rows - 1为负)
  • 如果rows等于1,则为record(因此rows - 1为零)

如果rows为正,则第一个格式字符串only包括rows的值(由于#)。因此,总体结果是:

Rows     Result
   2     2 records  (ditto for other values greater than 1)
   1     1 record
   0     no records

就我个人而言,我要么使用条件运算符,要么使用if/else语句——使用自定义数字格式字符串在最坏的情况下是"聪明的"。。。