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

Cấu trúc Char trong C#

Tổng quan

char (alias của System.Char) đại diện cho một **UTF-16 code unit** (16-bit). Ký tự Unicode cơ bản (BMP) chiếm 1 char. Ký tự bổ sung (emoji, chữ Hán hiếm) chiếm 2 char (surrogate pair).

Các phương thức tĩnh quan trọng

Phương thứcMô tả
ConvertToUtf32(char high, char low)Chuyển surrogate pair thành Unicode code point (int).
ConvertToUtf32(string, int index)Chuyển ký tự tại vị trí index (có thể surrogate) thành code point.
GetNumericValue(char)Lấy giá trị số của ký tự số (ví dụ '5' -> 5.0).
IsDigit(char/string, int)Kiểm tra chữ số thập phân.
IsLetter(char/string, int)Kiểm tra chữ cái Unicode.
IsLetterOrDigit(char/string, int)Kiểm tra chữ hoặc số.
IsLower/IsUpper(char/string, int)Kiểm tra chữ thường/hoa.
IsWhiteSpace(char/string, int)Kiểm tra khoảng trắng (space, tab, newline...).
IsPunctuation(char/string, int)Kiểm tra dấu câu.
IsSymbol(char/string, int)Kiểm tra ký hiệu (math, currency...).
Parse/TryParse(string, out char)Chuyển chuỗi 1 ký tự thành char.
ToLower/ToUpper(char, CultureInfo)Chuyển chữ hoa/thường có culture.

Ví dụ 1: Char.IsSymbol

using System;

public class Demo
{
    public static void Main()
    {
        char val = 'P';
        Console.WriteLine($"Value: {val}");
        Console.WriteLine($"IsSymbol: {Char.IsSymbol(val)}"); // False

        char sym = '+';
        Console.WriteLine($"\nValue: {sym}");
        Console.WriteLine($"IsSymbol: {Char.IsSymbol(sym)}"); // True
    }
}

Kết quả

Value: P
IsSymbol: False

Value: +
IsSymbol: True

Ví dụ 2: Char.IsWhiteSpace

using System;

public class Demo
{
    public static void Main()
    {
        char space = ' ';
        char tab = '\t';
        char letter = 'A';

        Console.WriteLine($"' ' IsWhiteSpace: {Char.IsWhiteSpace(space)}"); // True
        Console.WriteLine($"'\\t' IsWhiteSpace: {Char.IsWhiteSpace(tab)}"); // True
        Console.WriteLine($"'A' IsWhiteSpace: {Char.IsWhiteSpace(letter)}"); // False
    }
}

Kết quả

' ' IsWhiteSpace: True
'\t' IsWhiteSpace: True
'A' IsWhiteSpace: False

Ví dụ 3: Surrogate Pair & UTF-32

using System;

public class Demo
{
    public static void Main()
    {
        // Emoji 😀 = U+1F600 -> surrogate pair: \uD83D\uDE00
        string emoji = "😀";
        Console.WriteLine($"Emoji length (Char count): {emoji.Length}"); // 2

        int codePoint = Char.ConvertToUtf32(emoji, 0);
        Console.WriteLine($"Code point: U+{codePoint:X4}"); // U+1F600

        // Kiểm tra surrogate
        Console.WriteLine($"IsHighSurrogate(emoji[0]): {Char.IsHighSurrogate(emoji[0])}"); // True
        Console.WriteLine($"IsLowSurrogate(emoji[1]): {Char.IsLowSurrogate(emoji[1])}"); // True
    }
}

Instance Methods

  • Equals(char), Equals(object) - so sánh giá trị.
  • CompareTo(char) - so sánh thứ tự Unicode.
  • GetHashCode() - hash code.
  • ToString() - chuỗi length 1.

Lưu ý

  • Char là **value type** (struct), không nullable mặc định (dùng char? nếu cần).
  • Duyệt string bằng foreach cho char -> từng UTF-16 code unit (có thể tách surrogate pair). Dùng StringInfo hoặc Rune (.NET Core 3.0+) để duyệt theo grapheme/code point.