解释令人困惑的条件字符串格式
本文关键字:条件 字符串 格式 解释 | 更新日期: 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语句——使用自定义数字格式字符串在最坏的情况下是"聪明的"。。。