2013-07-03 28 views
8

Tôi đã đọc bài viết MSDN của boolean structure, khi tôi thấy rằng boolean có hai trường: TrueStringFalseString. Những tương ứng trở lại "True" và "False".Tại sao bool.TrueString và bool.FalseString tồn tại?

Sau một số tìm kiếm, ví dụ duy nhất tôi có thể tìm thấy là trong this dotnetperls article. Bài viết tuyên bố:

Các chương trình thường cần các chuỗi này. TrueString và FalseString là một cặp hữu ích của các thành viên chỉ đọc. Chúng đại diện cho các giá trị chân lý theo định dạng chuỗi. Chúng cung cấp sự hướng dẫn và trừu tượng hóa trực tiếp bằng cách sử dụng các chuỗi ký tự.

Vì vậy, nó rất hữu ích trong một số trường hợp. Nhưng cùng một bài viết không cung cấp một ví dụ thực tế (IMHO anyway).

Một số đọc thêm cũng khiến tôi chú ý: TrueString và FalseString là trường đọc công khai tĩnh. Và this dornetperls article trạng thái:

Đặc tả ngôn ngữ khuyến cáo sử dụng public static readonly lĩnh vực ... khi lĩnh vực này có thể thay đổi trong tương lai.

Bây giờ, tôi có thể hiểu được phần nào. Nếu nhà phát triển .NET quyết định thay đổi "True" và "False" thành "OkeyDokey" tương ứng và "Phủ định", bạn nên sử dụng TrueString và FalseString.

Nhưng điều đó vẫn để lại cho tôi câu hỏi: trong loại kịch bản nào bạn muốn so sánh một chuỗi với chuỗi chữ của một boolean? Bởi vì thoải mái: "Chương trình thường cần" chúng.

+3

Tôi có thể tưởng tượng nếu bạn đang thực hiện phân tích cú pháp của riêng mình (và không tận dụng 'Boolean.Parse' vì bất kỳ lý do gì).Tôi có lẽ sẽ tranh luận rằng câu lệnh "chương trình _often_ cần" chúng, nhưng nó chính đáng rằng chúng được sử dụng và nó là một quả rất thấp treo cho nhóm BCL để đưa vào. Có lẽ phương thức 'Boolean.ToString' cũng tận dụng chúng khi xuất ra ít nhất theo nghĩa đó, nó cung cấp một khai báo đơn/trung tâm về các biểu diễn chuỗi boolean và các nhà phát triển có thể sử dụng nó để so sánh bất kỳ đầu ra chuỗi nào từ' bool' hơn là viết mã cứng "" Đúng ". –

+3

... vì môi trường .NET được thiết kế để hỗ trợ nhiều ngôn ngữ. http://tackingflow.com/a/491367/284240 –

+0

@TimSchmelter, bạn có thể giải thích tại sao hỗ trợ đa ngôn ngữ có liên quan đến lý do tại sao bạn muốn biết chuỗi ký tự của một boolean không? EDIT: câu hỏi của liên kết bạn đã đăng cho tôi một ví dụ tốt. – Jordy

Trả lời

0

Nói cách dễ dàng. Boolean là một cấu trúc. phương thức ToString() boolean này biểu diễn một văn bản có thể đọc được của con người cho người dùng. Vì vậy, nếu bạn viết một số điều như thế.

bool b = false; 
b.ToString(); 

đầu ra sẽ là "sai" insteed là 0. "False" có thể đọc được bởi con người và dễ bị bắt.

Cũng có một số nơi bạn có thể muốn phân tích giá trị văn bản thành giá trị boolean. vì vậy chúng cũng có thể được biểu diễn dưới dạng giá trị boolean. ví dụ. chúng tôi sử dụng

Boolean.TryParse("false" ,out mybool) 

giá trị sai được đặt bởi phương pháp Tryparse vì điều này cho thấy chúng tôi có thể đọc giá trị từ công cụ chuỗi.

+0

Không bool b = false; Console.Write (b); sẽ xuất ra "False" thay vì 0? – Jordy

0

Nếu chương trình lưu trữ dữ liệu trong tệp hoặc cơ sở dữ liệu có thể đọc được của con người, nó có thể cần lưu trữ các giá trị dưới dạng chuỗi. Khi bạn đọc dữ liệu trở lại, nếu bạn biết dữ liệu được viết bởi ứng dụng của mình và sử dụng biểu diễn chuỗi chuẩn, bạn có thể so sánh nhanh hơn x == bool.TrueString so với số bool.TryParse(x ...). Bạn cũng có thể xác thực dữ liệu bằng cách đảm bảo tất cả các giá trị x == bool.TrueString || x == bool.FalseString

Nếu dữ liệu được nhập bởi con người hoặc hệ thống khác, TryParse là lựa chọn tốt hơn vì nó chấp nhận nhiều giá trị hơn và phân biệt giữa sai xác định và đâu vao không hợp lệ. (MSDN Boolean TryParse)