2014-09-02 22 views
8

Một cựu đồng nghiệp viết này:Giải thích định dạng chuỗi có điều kiện khó hiểu

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

Tôi đọc bài viết như thế này

Code Project - Custom String Formatting in .NET
MSDN - Custom Numeric Format Strings

Nhưng tôi không còn nhận được nó như thế nào định dạng mà công trinh. Rõ ràng tôi có thể thấy đầu ra nhưng tôi không hiểu phần này {0:#;;} và thứ hai. Tôi muốn làm điều tương tự để chỉ định độ tuổi (năm, năm ...)

Tôi rất tò mò về định dạng chuỗi này. Ai đó có thể giải thích hành vi này? Tác giả không còn làm việc với chúng tôi nữa.

+1

[The '"; "' Phần Separator] (http://msdn.microsoft.com/en-us/library/0c899ak8%28v=vs.110%29.aspx#SectionSeparator) – dasblinkenlight

Trả lời

10

Đây là một số custom numeric format string, về cơ bản - nhưng khá kỳ quặc, phải trung thực. Trong thực tế, đó là hai trong số họ:

#;; 
records;no records;record 

Trong mỗi trường hợp, bạn đã có ba phần, do có hai (các dấu chấm phẩy):

Phần đầu tiên áp dụng cho dương các giá trị, phần thứ hai áp dụng cho các giá trị âm và phần thứ ba áp dụng cho các số không.

tình hình của bạn là tiếp tục phức tạp bởi các nhà phát triển sử dụng rows - 1 như giá trị phải được định dạng bằng chuỗi định dạng thứ hai, do đó, nó thực sự:

  • records nếu rows lớn hơn 1 (vì vậy rows - 1 là tích cực)
  • no records nếu rows là bằng 0 (vì vậy rows - 1 là tiêu cực)
  • record nếu rows là t bình đẳng o 1 (vì vậy rows - 1 là zero)

Và chuỗi định dạng đầu tiên chỉ bao gồm giá trị của rows (do #) nếu rows là tích cực. Vì vậy, kết quả tổng thể là:

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

Cá nhân tôi sẽ phải hoặc là sử dụng một nhà điều hành có điều kiện cho điều đó, hoặc nếu/else - sử dụng một chuỗi định dạng tùy chỉnh số là "thông minh" theo cách tồi tệ nhất ...

+0

Tôi ... đợi .. .gì? EDIT ... cảm ơn vì đã giải thích thêm – DidIReallyWriteThat

+0

Đó là cách sử dụng khá thông minh của định dạng chuỗi. Nó cũng quan trọng, mà chỉ cho các giá trị tích cực số thực tế sẽ được in (vì '# ;; 'ở định dạng đầu tiên). – MarcinJuraszek

+0

@CalvinSmith: Tôi đã chỉnh sửa thêm - điều này có thể hữu ích. –

Các vấn đề liên quan