Giới thiệu
Phương thức Boolean.ToString(IFormatProvider) trong C# chuyển đổi giá trị boolean (true/false) thành biểu diễn chuỗi tương đương. Tham số IFormatProvider cho phép tùy chỉnh theo culture, tuy nhiên boolean không bị ảnh hưởng bởi culture (luôn trả về "True"/"False" tiếng Anh).
Cú pháp
public string ToString (IFormatProvider provider);
Tham số provider là đối tượng IFormatProvider (thường là CultureInfo).
Ví dụ 1: Culture en-US
using System;
using System.Globalization;
public class Demo {
public static void Main(String[] args) {
bool val1 = true;
bool val2 = false;
Console.WriteLine("Value1 (Hashcode) = " + val1.GetHashCode());
Console.WriteLine("Value1 (TypeCode) = " + val1.GetTypeCode());
Console.WriteLine("Value2 (Hashcode) = " + val2.GetHashCode());
Console.WriteLine("Value2 (TypeCode) = " + val2.GetTypeCode());
CultureInfo provider = new CultureInfo("en-us");
Console.WriteLine("Value1 = " + val1.ToString(provider));
Console.WriteLine("Value2 = " + val2.ToString(provider));
}
}
Đầu ra ví dụ 1
Value1 (Hashcode) = 1 Value1 (TypeCode) = Boolean Value2 (Hashcode) = 0 Value2 (TypeCode) = Boolean Value1 = True Value2 = False
Ví dụ 2: Culture fr-FR (Pháp)
using System;
using System.Globalization;
public class Demo {
public static void Main(String[] args) {
bool val1 = true;
bool val2 = false;
Console.WriteLine("Value1 (Hashcode) = " + val1.GetHashCode());
Console.WriteLine("Value1 (TypeCode) = " + val1.GetTypeCode());
Console.WriteLine("Value2 (Hashcode) = " + val2.GetHashCode());
Console.WriteLine("Value2 (TypeCode) = " + val2.GetTypeCode());
// Thay đổi culture sang Pháp
CultureInfo provider = new CultureInfo("fr-FR");
Console.WriteLine("Value1 = " + val1.ToString(provider));
Console.WriteLine("Value2 = " + val2.ToString(provider));
}
}
Đầu ra ví dụ 2
Value1 (Hashcode) = 1 Value1 (TypeCode) = Boolean Value2 (Hashcode) = 0 Value2 (TypeCode) = Boolean Value1 = True Value2 = False
Giải thích
- Kết quả giống hệt nhau giữa en-US và fr-FR vì boolean không phụ thuộc culture. .NET luôn trả về "True" và "False" (tiếng Anh, chữ cái đầu viết hoa).
- Hash code:
true→ 1,false→ 0. - TypeCode:
TypeCode.Boolean(giá trị 3). - Overload này tồn tại để tuân thủ interface
IFormattable.
Các overload ToString() khác của Boolean
| Phương thức | Mô tả | Ví dụ |
|---|---|---|
| ToString() | Mặc định, trả về "True"/"False" | true.ToString() → "True" |
| ToString(IFormatProvider) | Có provider, nhưng bỏ qua | true.ToString(CultureInfo.InvariantCulture) → "True" |
| ToString(string format) | Format tùy chỉnh (không hỗ trợ format chuẩn) | true.ToString("G") → "True" |
Tùy chỉnh hiển thị boolean
Nếu cần hiển thị "Có/Không", "Yes/No", "Đúng/Sai" theo ngôn ngữ, hãy tự triển khai:
public static string ToVietnamese(this bool value) {
return value ? "Đúng" : "Sai";
}
// Sử dụng
bool flag = true;
Console.WriteLine(flag.ToVietnamese()); // "Đúng"
Khi nào dùng IFormatProvider với Boolean?
- Hầu như không bao giờ cần thiết cho boolean.
- Chỉ dùng khi code generic yêu cầu
IFormattableinterface. - Đối với số, ngày tháng, tiền tệ thì
IFormatProviderrất quan trọng.