条件判断
if 语句
if 语句根据布尔表达式的结果决定是否执行代码块。条件为 true 时执行,为 false 时跳过。
CSHARP
int score = 85;
if (score >= 60)
{
Console.WriteLine("及格了");
}
TEXT
及格了
if...else 语句
当条件为 true 执行一个分支,为 false 执行另一个分支,使用 if...else 结构。
CSHARP
int age = 16;
if (age >= 18)
{
Console.WriteLine("已成年");
}
else
{
Console.WriteLine("未成年");
}
TEXT
未成年
if...else if 多分支
需要判断多个互斥条件时,使用 else if 依次检查,只会执行第一个匹配的分支。
CSHARP
int score = 78;
if (score >= 90)
{
Console.WriteLine("优秀");
}
else if (score >= 80)
{
Console.WriteLine("良好");
}
else if (score >= 60)
{
Console.WriteLine("及格");
}
else
{
Console.WriteLine("不及格");
}
TEXT
及格
嵌套 if
if 语句可以嵌套使用,但建议嵌套不超过两层,过深嵌套会降低可读性,应考虑提取方法或改用 else if。
示例
CSHARP
int age = 25;
bool hasTicket = true;
if (age >= 18)
{
if (hasTicket)
{
Console.WriteLine("可以入场");
}
else
{
Console.WriteLine("需要购票");
}
}
else
{
Console.WriteLine("年龄不足");
}
TEXT
可以入场
switch 语句
switch 语句将一个表达式与多个常量值匹配,执行对应 case 分支。C# 不允许像 C/C++ 那样的穿透执行,每个 case 必须以 break、return 或 throw 结束,否则编译报错。
示例
CSHARP
int day = 3;
switch (day)
{
case 1:
Console.WriteLine("星期一");
break;
case 2:
Console.WriteLine("星期二");
break;
case 3:
Console.WriteLine("星期三");
break;
case 4:
Console.WriteLine("星期四");
break;
case 5:
Console.WriteLine("星期五");
break;
default:
Console.WriteLine("周末");
break;
}
TEXT
星期三
多个 case 共享同一段逻辑时,可以连续列出 case 标签:
CSHARP
int month = 2;
switch (month)
{
case 12:
case 1:
case 2:
Console.WriteLine("冬季");
break;
case 3:
case 4:
case 5:
Console.WriteLine("春季");
break;
default:
Console.WriteLine("其他季节");
break;
}
TEXT
冬季
💡 C# 中如果确实需要从一个 case 跳到另一个,必须使用
goto case x,不能省略 break 穿透。
switch 表达式(C# 8+)
C# 8 引入了 switch 表达式,它是一个表达式而非语句,返回匹配结果,语法更简洁。使用 _ 表示默认分支。
示例
CSHARP
int code = 404;
string message = code switch
{
200 => "OK",
301 => "Moved",
404 => "Not Found",
500 => "Server Error",
_ => "Unknown"
};
Console.WriteLine(message);
TEXT
Not Found
模式匹配初识
C# 7 起支持在条件判断中使用模式匹配,常见形式包括类型模式(is Type variable)和 when 守卫子句。
示例
CSHARP
object obj = "Hello C#";
if (obj is string s)
{
Console.WriteLine($"字符串长度: {s.Length}");
}
else
{
Console.WriteLine("不是字符串");
}
TEXT
字符串长度: 8
在 switch 中使用 when 守卫添加额外条件:
CSHARP
int value = 15;
string category = value switch
{
int i when i > 100 => "超大",
int i when i > 10 => "中等",
int i when i > 0 => "偏小",
_ => "无效"
};
Console.WriteLine(category);
TEXT
中等
条件运算符 ?:
条件运算符 ?: 是 if...else 的简写形式,又称三元运算符。语法为 condition ? valueIfTrue : valueIfFalse,整个表达式返回对应值。
示例
CSHARP
int age = 20;
string status = age >= 18 ? "成年" : "未成年";
Console.WriteLine(status);
TEXT
成年
嵌套使用(不建议过多嵌套):
CSHARP
int score = 75;
string result = score >= 90 ? "A" : score >= 60 ? "B" : "C";
Console.WriteLine(result);
TEXT
B
⚠️ 条件运算符嵌套超过两层后可读性急剧下降,此时应改用 if...else if 语句。
❓ 常见问题
Q C# 的 switch 可以像 C 语言那样省略 break 穿透执行吗?
A 不可以,C# 不允许 switch 穿透,每个 case 必须以 break/return/throw 结束,否则编译报错;多个 case 共享逻辑可连续列出标签。
Q switch 表达式和 switch 语句有什么区别?
A switch 表达式是表达式,必须有返回值,语法用
=> 和逗号分隔;switch 语句是语句,不需要返回值,用 case/break 结构。Q
is 和 == 有什么区别?A
== 比较值是否相等,is 用于模式匹配,可同时判断类型并声明变量,如 obj is string s。Q 条件运算符可以替代所有 if...else 吗?
A 不能,条件运算符只能用于有返回值的场景,且不支持多条语句的逻辑块,复杂逻辑应使用 if...else。
📖 小节
- if 语句根据布尔条件决定是否执行代码块
- if...else 提供二选一分支,else if 处理多条件互斥判断
- 嵌套 if 应控制在两层以内以保持可读性
- switch 语句匹配常量值,C# 禁止穿透,必须 break/return/throw
- switch 表达式(C# 8+)是返回值的简洁写法,用
_表示默认 - 模式匹配用
is Type var判断类型并提取值,when 守卫添加额外条件 - 条件运算符
?:简化简单的二选一赋值
📝 作业
- 编写程序,输入一个整数,判断它是正数、负数还是零,并输出对应结果
- 使用 switch 表达式,将月份(1-12)映射为对应季节名称
- 编写程序,接收一个 object 变量,使用
is模式匹配判断其类型(int、string 或其他),并输出类型和值 - 使用条件运算符将成绩整数转换为等级字母(90以上A、80以上B、60以上C、其余D),并与 if...else if 版本对比可读性



