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ức | Mô 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ùngStringInfohoặcRune(.NET Core 3.0+) để duyệt theo grapheme/code point.