Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Phương thức Boolean.ToString(IFormatProvider) trong C#

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ứcMô tảVí dụ
ToString()Mặc định, trả về "True"/"False"true.ToString() → "True"
ToString(IFormatProvider)Có provider, nhưng bỏ quatrue.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 IFormattable interface.
  • Đối với số, ngày tháng, tiền tệ thì IFormatProvider rất quan trọng.