2014-09-02 25 views
8

一名前同事這樣寫道:解釋混亂的條件字符串格式

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:#;;}和第二個。我想爲指定年齡(年,年...)做同樣的事情

我很好奇這個字符串格式。有人可以解釋這種行爲嗎?作者不再和我們一起工作。

+1

[The'';''Section Separator](http://msdn.microsoft.com/en-us/library/0c899ak8%28v=vs.110%29.aspx#SectionSeparator) – dasblinkenlight 2014-09-02 16:41:36

回答

10

這是一個custom numeric format string,基本上 - 但一個很奇怪的,說實話。事實上,這是他們兩個人:

#;; 
records;no records;record 

在每一種情況下,你有三個部分,由於有兩個(分號):

第一部分適用於正值,第二部分適用於負值,第三部分適用於零。

你的情況是使用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語句用於那些條件操作符 - 使用自定義數字格式字符串是在最糟糕的方式「聰明」 ......

+0

I ... wait ... 。什麼?編輯...感謝進一步解釋 – DidIReallyWriteThat 2014-09-02 16:41:23

+0

這是一個非常聰明的字符串格式的使用。同樣重要的是,只有正值的實際數字纔會被打印出來(因爲'#;;'是第一種格式)。 – MarcinJuraszek 2014-09-02 16:43:00

+0

@CalvinSmith:我已經進一步編輯了 - 這可能有幫助。 – 2014-09-02 16:43:31