一位前同事写道:
String.Format("{0:#;;} {1:records;no records;record}", rows, rows - 1);
//Rows is a integer value
我读过这些文章
Code Project - Custom String Formatting in .NET
MSDN - Custom Numeric Format Strings
但我仍然不知道这种格式是如何运作的。显然我可以看到输出,但我不理解这部分{0:#;;}
和第二部分。我想做同样的事情来指定年龄(年,年......)
我对这种字符串格式很好奇。有人可以解释这种行为吗?作者不再与我们合作。
答案 0 :(得分:10)
这是custom numeric format string,基本上 - 但实际上是一个非常奇怪的。事实上,它是两个:
#;;
records;no records;record
在每种情况下,由于有两个section separators(分号),你有三个部分:
第一部分适用于正值,第二部分适用于负值,第三部分适用于零。
开发人员使用rows - 1
作为要由第二个格式字符串格式化的值,使您的情况变得更加复杂,所以它确实是:
records
如果rows
大于1(因此rows - 1
为正)no records
如果rows
等于0(因此rows - 1
为负)record
如果rows
等于1(所以rows - 1
为零)如果rows
为正,则第一个格式字符串仅包含#
的值(由于rows
)。所以总体结果是:
Rows Result
2 2 records (ditto for other values greater than 1)
1 1 record
0 no records
就我个人而言,我会使用条件运算符,或者if / else语句 - 使用自定义数字格式字符串以最糟糕的方式“聪明”......