Sự khác biệt giữa Convert.ToBoolean (string) và Boolean.Parse (string) là gì?


80

Sự khác biệt giữa hai phương pháp là gì

Convert.ToBoolean()

Boolean.Parse()?

Có lý do gì để sử dụng cái này hay cái kia không?

Ngoài ra, có bất kỳ type.Parse()phương pháp nào khác mà tôi nên theo dõi không?

Cảm ơn,

Matt

Câu trả lời:


79

Convert.ToBoolean(string)thực sự bool.Parse()vẫn gọi , vì vậy đối với các không null string, không có sự khác biệt về chức năng. (Đối với null strings, Convert.ToBoolean()trả về false, trong khi bool.Parse()ném ArgumentNullException.)

Với thực tế đó, bạn nên sử dụng bool.Parse()khi bạn chắc chắn rằng thông tin đầu vào của bạn không phải là giá trị rỗng, vì bạn đã lưu cho mình một kiểm tra rỗng.

Convert.ToBoolean()tất nhiên có một số quá tải khác cho phép bạn tạo một booltừ nhiều kiểu tích hợp khác, trong khi Parse()chỉ dành cho strings.

Về phương thức type.Parse () mà bạn nên chú ý, tất cả các kiểu số tích hợp sẵn đều có Parse()cũng như TryParse()các phương thức. DateTimecó những cái đó, cũng như các phương thức ParseExact()/ bổ sung TryParseExact(), cho phép bạn chỉ định một định dạng dự kiến ​​cho ngày.


Cảm ơn vì các chi tiết. Vì vậy, không có sự khác biệt về hiệu suất giữa hai hoặc bạn có thể nói rằng mức tăng cực kỳ nhỏ bằng cách sử dụng Boolean.Parse (string)?
mbrownnyc

1
@mbrownnyc Bạn sẽ nhận được một khoản lợi nhuận rất nhỏ (có thể không thể nhận thấy) bằng cách sử dụng Parse() nếu bạn chắc chắn đầu vào không phải là chuỗi rỗng . Nếu bạn không chắc chắn, chỉ cần sử dụng ToBoolean(), vì nó sẽ kiểm tra cho bạn. Và nếu bạn không muốn một chuỗi null dẫn đến sai, thì hãy tự mình thực hiện kiểm tra, rồi gọi Parse()nếu nó không phải là null.
dlev

34

Đây là bản demo ngắn:

object ex1 = "True";
Console.WriteLine(Convert.ToBoolean(ex1)); // True
Console.WriteLine(bool.Parse(ex1.ToString())); // True

object ex2 = "true";
Console.WriteLine(Convert.ToBoolean(ex2)); // True
Console.WriteLine(bool.Parse(ex2.ToString())); // True

object ex3 = 1;
Console.WriteLine(Convert.ToBoolean(ex3)); // True
Console.WriteLine(bool.Parse(ex3.ToString())); // Unhandled Exception: System.FormatException

object ex3 = "1";
Console.WriteLine(Convert.ToBoolean(ex3)); // An unhandled exception of type 'System.FormatException' occurred
Console.WriteLine(bool.Parse(ex3.ToString())); // Unhandled Exception: System.FormatException

object ex4 = "False";
Console.WriteLine(Convert.ToBoolean(ex4)); // False
Console.WriteLine(bool.Parse(ex4.ToString())); // False

object ex5 = "false";
Console.WriteLine(Convert.ToBoolean(ex5)); // False
Console.WriteLine(bool.Parse(ex5.ToString())); // False

object ex6 = 0;
Console.WriteLine(Convert.ToBoolean(ex6)); // False
Console.WriteLine(bool.Parse(ex6.ToString())); // Unhandled Exception: System.FormatException

object ex7 = null;
Console.WriteLine(Convert.ToBoolean(ex7)); // False
Console.WriteLine(bool.Parse(ex7.ToString())); // Unhandled Exception: System.NullReferenceException

Lưu ý: Cũng có hai thuộc tính boolTrueString và FalseString, nhưng hãy cẩn thận, bởi vì bool.TrueString != "true", chỉbool.TrueString == "True"

Console.WriteLine(bool.TrueString); // True
Console.WriteLine(bool.FalseString); // False

2
Convert.ToBoolean("1"); // Format Exception
Robert McKee

3

Boolean.Parse()sẽ chuyển đổi một biểu diễn chuỗi của một giá trị boolean logic thành một giá trị boolean. Convert.ToBoolean()có nhiều quá tải sẽ chuyển đổi các kiểu nguyên thủy thành boolean tương đương của chúng.

Hầu hết, nếu không phải tất cả, các kiểu nguyên thủy trong C # có một phương thức * .Parse / Convert.To * được liên kết phục vụ cùng một mục đích như Boolean.Parse()/Convert.ToBoolean().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.