C# 字符类型详解
C# 中的字符类型主要用于表示单个 Unicode 字符,是文本处理的基础。下面我将全面介绍 C# 中的字符类型及其相关操作。
一、字符类型基础
1. char 类型
-
关键字:
char - 大小: 2 字节 (16 位)
- 范围: U+0000 到 U+FFFF (Unicode 字符)
- 默认值: '\0' (U+0000)
char letter = 'A'; // 单引号表示字符
char newLine = '\n'; // 转义字符
char unicodeChar = '\u0041'; // Unicode 表示,等同于 'A'
创建单字符类型
语法
char 变量名;
char 变量名 = '单字符';//必须单引号包裹
示例
//声明单字符类型
char myGrade;
//声明单字符类型并初始化
char myGrade = 'B';
2. 字符字面量表示
- 单引号括起的单个字符:
'A' - 转义序列:
-
'\''单引号 -
'\"'双引号 -
'\\'反斜杠 -
'\0'空字符 -
'\n'换行 -
'\r'回车 -
'\t'制表符
-
二、字符操作
1. 字符与整数的关系
char 本质上是 16 位无符号整数,可以与整型相互转换:
char c = 'A';
int code = c; // 隐式转换 char→int,得到 ASCII 码 65
char fromCode = (char)65; // 显式转换 int→char,得到 'A'
2. 常用字符方法
Char 结构体提供的静态方法:
bool isDigit = Char.IsDigit('5'); // true
bool isLetter = Char.IsLetter('A'); // true
bool isWhiteSpace = Char.IsWhiteSpace(' '); // true
bool isUpper = Char.IsUpper('A'); // true
char lower = Char.ToLower('A'); // 'a'
char upper = Char.ToUpper('a'); // 'A'
实例方法:
char c = 'B';
string s = c.ToString(); // "B"
int compare = c.CompareTo('A'); // 1 (B > A)
3. 字符比较
char a = 'A', b = 'B';
bool equal = (a == b); // false
bool lessThan = (a < b); // true (比较 Unicode 码点)
三、字符与字符串
1. 字符数组与字符串转换
// 字符串→字符数组
string str = "Hello";
char[] chars = str.ToCharArray();
// 字符数组→字符串
char[] hello = {'H','e','l','l','o'};
string newStr = new string(hello);
2. 访问字符串中的字符
string text = "World";
char first = text[0]; // 'W'
// text[0] = 'w'; // 错误!字符串是不可变的
四、特殊字符处理
1. Unicode 代理对
对于超出基本多语言平面(BMP)的字符(>U+FFFF),需要使用两个 char 表示:
string heart = "💖"; // 心形符号
Console.WriteLine(heart.Length); // 2 (代理对)
char[] heartChars = heart.ToCharArray(); // 两个char
2. 字符编码转换
// 获取字符的UTF-8字节
char c = '中';
byte[] utf8Bytes = Encoding.UTF8.GetBytes(new[] { c });
// 从字节还原字符
char decoded = Encoding.UTF8.GetChars(utf8Bytes)[0];
五、最佳实践
-
字符验证:在处理用户输入时,使用
Char.IsDigit等方法验证 -
性能考虑:对大量字符操作时,考虑使用
Span<char> - 国际化:注意 Unicode 组合字符和代理对
- 避免魔法字符:使用常量或枚举代替硬编码字符
六、字符类型与其他类型的转换
| 转换目标 | 方法 | 示例 |
|---|---|---|
| int | 隐式转换 | int code = 'A'; |
| string | ToString() | string s = 'A'.ToString(); |
| byte | 显式转换 | byte b = (byte)'A'; |
| 枚举 | 显式转换 | var c = (CharEnum)'A'; |
七、Rune 类型(.NET Core 3.0+)
对于处理 Unicode 标量值(包括代理对),可以使用 Rune 类型:
Rune heart = new Rune('💖');
Console.WriteLine(heart.Value); // 128150
Console.WriteLine(Rune.IsLetter(heart)); // true
掌握 C# 的字符类型对于文本处理、字符串操作和国际化开发至关重要。合理使用字符类型可以使代码更加高效和可靠。