首页 / C# 入门教程 / 字符与布尔类型

C# 入门教程

字符与布尔类型

本教程共 100 篇 · 第 11 篇 · 更新于 2026-07-31 · 约 8 分钟阅读

C#C# 入门教程charbool转义字符

11. 字符与布尔类型

本节目标:掌握 char 单字符的写法、bool 的真假值,以及常见转义字符的含义,并理解它们为什么这样设计。

前面讲了数字,这章看两个”小但常用”的类型:charbool。它们一个管”单个字符”,一个管”是否成立”。别看篇幅短,后面每一章几乎都要用到它们。

char:单个字符

char(字符)装一个 Unicode 字符,用单引号括起来。注意,单引号里只能放一个字符:

namespace CSharpDemo;

char grade = 'A';
char symbol = '中';
Console.WriteLine(grade);
Console.WriteLine(symbol);

'A' 是英文字母,'中' 是汉字——C# 的 char 基于 Unicode,所以中英文都能装。一个 char 占 2 字节(UTF-16 的一个代码单元)。

Note

单引号 ' 'char,双引号 " "string(字符串)。写错引号类型,编译直接报错。新手常把 char c = "x"; 写错成双引号,记住:字符用单,文字用双。

为什么 char 用单引号、string 用双引号

这是 C# 从 C/C++/Java 一脉相承的约定,目的很实在:编译器一眼就能区分”你要的是单个字符”还是”一段文本”。如果两者都用双引号,写 'A'"A" 就会模棱两可,类型推断也会乱套。单双引号分工,让”单字符 vs 多字符”在语法层面就分得清清楚楚,少踩很多坑。

字符也能比大小

字符在底层是对应的数字编码,所以可以比较:

char a = 'a';
char b = 'b';
Console.WriteLine(a < b);   // True,因为 'a' 的编码小于 'b'

这在某些判断场景有用,比如判断一个字符是不是数字、是不是字母。不过真要判断,通常用 char.IsDigitchar.IsLetter 这类现成方法更稳妥。

编码是怎么回事

char 之所以能比大小,是因为每个字符背后都对应一个整数编号(码点)。英文常用的是 ASCII,中文等更广范围用的是 Unicode。比如 'A' 的编号是 65,'a' 是 97。比较字符其实就是比较它们的编号。理解这一点,你就明白为什么 '0'0 完全不是一回事:'0' 是字符,编号 48;0 是数字零。混用它们是最常见的低级错误之一。

bool:真与假

bool(布尔)只有两个值:true(真)和 false(假)。它是所有”条件判断”的基础。

namespace CSharpDemo;

bool isOpen = true;
bool hasError = false;
Console.WriteLine(isOpen);    // True

你很少直接写 true/false,更多是让表达式算出来:

int age = 20;
bool isAdult = age >= 18;     // 表达式结果为 True
Console.WriteLine(isAdult);

age >= 18 这个表达式的值就是 bool。后面讲 if、循环时,全靠 bool 决定走哪条路。

Tip

C# 里条件判断必须是 bool,不能像某些语言用 01 代替。写 if (age) 会报错,必须写 if (age > 0)。这条规则反而帮你少出 bug。

bool 的设计初衷

布尔类型最早由数学家乔治·布尔(George Boole)提出,用来表达”命题的真假”。程序里到处是判断:“余额够不够""文件存不存在""用户登录了没”。把这些”是否成立”统一成 true/false 两种状态,逻辑就变得干净、可组合。C# 强制要求条件必须是 bool,而不是”非零即真”,正是为了堵住”误把数值当条件”的漏洞。

转义字符

有些字符肉眼看不见(如换行、制表),或会和语法冲突(如双引号)。用反斜杠 \ 开头的转义序列(escape sequence)表示它们:

转义含义
\n换行(newline)
\t制表符(tab)
\\一个反斜杠本身
\"字符串里的双引号
\'字符里的单引号
\0空字符

示例:

Console.WriteLine("第一行\n第二行");        // \n 换行
Console.WriteLine("姓名:\t年龄");            // \t 对齐
Console.WriteLine("他说:\"你好\"");         // 输出:他说:"你好"
Console.WriteLine("路径 C:\\temp");         // 输出:路径 C:\temp
Note

从 C# 13 起,新增了 \e 转义,表示 ESC 控制字符(U+001B),常用于终端颜色控制。初学用不到,知道有这回事即可。

Warning

转义字符前面那个 \ 绝对不能漏。把该写的 \n 写成 n,编译不会报错,但输出就是普通字母 n,不会换行。这种”静默出错”最难排查——运行结果不对,却找不到明显毛病。写字符串时多留意反斜杠。

字符串里的引号难题

想在字符串里放双引号,除了 \",还可以用后面要学的逐字字符串 @"..."原始字符串 """...""",后者在长文本里最干净。第 13 章专门讲字符串字面量。

怎么选

  • 偶尔一个引号:\" 最直接。
  • 整段带反斜杠的路径或正则:@"C:\temp\a.txt" 不用每个反斜杠都转义。
  • 大段含引号的多行文本:原始字符串 """...""" 最清爽,连缩进都帮你处理。

三者只是写法不同,表达的字符内容一致,按场景挑顺手的即可。

char 与 string 的关系

string 可以看作一串 char。你可以用索引取出其中某个字符:

string name = "小明";
char first = name[0];     // 取出第一个字符 '小'
Console.WriteLine(first);

name[0] 里的 [0] 是”索引”,表示从第 0 个开始数。这种”按下标取字符”的能力,在字符串处理里天天用。

char 能当数字用吗

能。char 本质是 Unicode 编码值,可以隐式转成 int 看它的码点:

char c = 'A';
int code = c;        // 65,'A' 的 ASCII/Unicode 码
Console.WriteLine(code);

反过来从数字得到字符,用强制转换:char ch = (char)65; 得到 'A'。这在处理密码强度、字符分类时偶尔用到,但平时更推荐 char.IsLetter 这类方法,可读性更好。

适用场景对比

需求推荐做法
判断字符类别char.IsDigit / char.IsLetter
拿到字符编号int code = c; 隐式转
由编号得字符(char)65 强制转

手写 c >= '0' && c <= '9' 也能用,但现成方法更不易错、更表意,首选它们。

bool 能参与算术吗

不能。C# 不允许把 bool 当 0/1 参与加减。这和某些语言不同,但恰恰是 C# 的安全设计:防止你把”条件真假”和”数值”混为一谈,写出歧义代码。

bool ok = true;
// int n = ok + 1;   错误:bool 不能转 int

要转成数字,得显式写:int flag = ok ? 1 : 0;。明确表达意图,比隐式转换更清晰。

Tip

bool 只跟逻辑运算(&&||!)和条件判断(ifwhile)搭配。别试图把它塞进算式,编译器会拦你,也省了你以后踩坑。

常见疑问解答

问:一个 char 能存一个汉字吗? 能。char 基于 Unicode,一个汉字正好占一个 char。但要注意:某些表情符号(如 emoji)由多个代码单元组成,一个 char 装不下完整表情,需用 Rune 或字符串层级处理。日常中英文都没问题。

问:bool 占几个字节? 作为值类型,bool 在内存里通常占 1 字节(实际有对齐开销,但语义上是真/假)。比”它占多大”更重要的是:它只表示成立或不成立,不参与算术。

问:转义字符漏写会怎样? 比如该写 \n 却写成 n,输出就是普通字母 n,不会换行。这种错不会让编译失败,但运行结果不对,排查时记得检查字符串里的反斜杠是否漏了。

要点速记

  • char 用单引号装单个字符,string 用双引号装文本。
  • bool 只有 true/false,是条件判断的基础。
  • 条件判断必须是 bool,不能用数字代替。
  • 转义字符:\n 换行、\t 制表、\\ 反斜杠、\" 引号。

动手练一练

  1. char 存一个字母 'A' 和一个汉字 '中',分别打印,确认 char 能装中文。
  2. 定义 int age = 20; bool isAdult = age >= 18;,打印 isAdult,理解表达式产出 bool
  3. 写字符串 "第一行\n第二行",打印观察换行效果;再写 @"C:\test\a.txt" 对比转义差异。

char 与 string 的边界

char 是单个字符,string 是字符序列,两者常配合:用索引从 string 取出的是 char,把多个 char 拼起来得到 string

string word = "码上学";
char first = word[0];          // '码'
char[] chars = word.ToCharArray();   // 拆成字符数组
string back = new string(chars);     // 再拼回字符串
Console.WriteLine($"{first}, {back}");

ToCharArray 把字符串拆成 char 数组,方便逐字符处理;new string(chars) 再拼回去。这种”拆—处理—拼”的模式在文本清洗里很常见。

bool 在集合过滤里的角色

bool 常被用作”筛选条件”的返回值。比如判断一个名字是否合格:

bool IsValidName(string name) => !string.IsNullOrEmpty(name) && name.Length <= 10;
Console.WriteLine(IsValidName("小明"));   // True

方法返回 bool,就能直接塞进 if 或 LINQ 的 Where 里做条件。你会越来越习惯”让方法返回 bool 表达判断”这种写法。

常见考题:判字符类别

判断一个 char 是数字、字母还是其他,别手写范围比较,用 char 类的现成方法更稳:

char c = '7';
Console.WriteLine(char.IsDigit(c));    // True,是数字
Console.WriteLine(char.IsLetter(c));   // False

char ch = 'A';
Console.WriteLine(char.IsUpper(ch));   // True,是大写字母

IsDigitIsLetterIsUpperIsLower 覆盖了常见分类需求,比 c >= '0' && c <= '9' 这种手写范围更不易错,也更表意。处理用户输入、解析文本时很常用。

小结与下一步

char 用单引号装单个字符,bool 只有 true/false 管真假。转义字符让你在字符串里塞换行、引号等特殊符号。别小看这两个小类型,条件判断和文本处理都靠它们撑着。一个关键直觉:字符本质是编号,布尔本质是命题真假,理解底层,写法就不会乱。

下一章讲”类型转换”:当 string 要变 int、小数要变整数时,该怎么安全地转。