简单了解一下选择语句吧:
if、if-else 和 switch 语句根据表达式的值从多个可能的语句选择要执行的路径。
1. if 语句
仅当提供的布尔表达式的计算结果为 true 时,if 语句才执行语句。
1.1 if类型
先举个例子吧:
int a = 5;
int b = 6;
if (a + b > 10)
Console.WriteLine("The answer is greater than 10.");//结果大于10

我们可以看到结果打印了这句话,因为a + b = 11,而 11 > 10,满足条件,所以结果为 true
这个示例展示了if类型和布尔类型的强大功能。
1.2 布尔类型
关于布尔类型,先带你回忆一个熟悉的例子(参考文章 C#知识学习-001 - 3.5.4)
在字符串的学习中,判断某一个子字符串是否存在时,就用到了布尔类型

C# 定义布尔变量的特殊类型 bool
bool 类型关键字是 .NET System.Boolean 结构类型的别名。
布尔值是一个变量,可以是两个值之一:true或false,bool 类型的默认值为 false。
bool 类型是 比较和相等运算符的结果类型。
回到 if 语句, if 语句检查 bool 的值。 如果值为值 true,则执行后面的 if 语句。 否则,跳过这些语句
你可以这样理解(如果 a + b > 10,就打印这句话,如果 <= 就不打印)
我带你来验证一下吧:
int a = 2;
int b = 6;
if (a + b > 10)
Console.WriteLine("The answer is greater than 10.");//结果大于10

可以看到什么也没有打印,因为 a + b = 8,而 8 < 10,不满足条件,所以结果为 false,跳过语句
1.3 关于添加 { }
如果你要打印多条语句,则需要改变格式,添加 { }:
int a = 5;
int b = 6;
if (a + b > 10)
{
Console.WriteLine($"The answer is {a + b > 10}");
Console.WriteLine("The answer is greater than 10.");//结果大于10
}

(单条语句也可以加 { },也是没错的,不加是为了方便)
大括号{ }明确告诉编译器哪些代码属于该if条件。如果不加的话,那么只有第一句是属于if条件
举个例子:
如果你想让(a + b > 10)的时候再打印这两句
但是你没有加大括号,那么第二句就会打印出来(这与你的期望是相反的)
int a = 2;
int b = 6;
if (a + b > 10)
Console.WriteLine($"The answer is {a + b < 10}"); // 这行属于if
Console.WriteLine("The answer is always runs"); // 这行总是执行,不属于if!

1.4 嵌套
嵌套就类似套娃娃,一层 if 语句里还可以有一个(或多个) if 语句、
我来举个例子吧:
int a = 6;
int b = 6;
if (a + b > 10)
{
Console.WriteLine($"The num1 answer is {a + b > 10}");//结果大于10
if (a + b > 11)
{
Console.WriteLine($"The num2 answer is {a + b > 11}");//结果大于11
}
if (a + b > 12)
{
Console.WriteLine($"The num3 answer is {a + b > 12}");//结果大于12
}
}

2. if-else 语句
若要在 true 和 false 分支中执行不同的代码,请创建一个 else 在条件为 false 时执行的分支。
int a = 5;
int b = 3;
if (a + b > 10)
Console.WriteLine("The answer is greater than 10");
else
Console.WriteLine("The answer is not greater than 10");

就相当于,a + b > 10时打印 if语句里的,不然就打印else语句里的
else语句跟if 语句一样的,执行一句可以不加大括号 { },多句时需要加
int a = 5;
int b = 3;
if (a + b > 10)
Console.WriteLine("The answer is greater than 10");
else
{
Console.WriteLine("The answer is not greater than 10");
Console.WriteLine("over");
}

2.1 else的嵌套
在else语句里可以嵌套if 语句或者if-else 语句
int a = 5;
int b = 3;
if (a + b > 10)
Console.WriteLine("The answer is greater than 10");
else
{
Console.WriteLine("The answer is not greater than 10");
if (a + b > 6)
Console.WriteLine("The answer is greater than 6");
else
{
Console.WriteLine("The answer is not greater than 6");
}
}

补充:(当if 语句和else语句都加时)
int a = 5;
int b = 3;
if (a + b > 10)
{
Console.WriteLine("The answer is greater than 10");
Console.WriteLine("over");
}
else
{
Console.WriteLine("The answer is not greater than 10");
Console.WriteLine("over");
}

2.2 比较符号
现在加大难度了噢,让我们先看例子吧:
int a = 5;
int b = 3;
int c = 4;
if ((a + b + c > 10) && (a == b))
{
Console.WriteLine("The answer is greater than 10");
Console.WriteLine("And a == b");
}
else
{
Console.WriteLine("The answer is not greater than 10");
Console.WriteLine("Or a != b");
}

别担心噢,如果觉得有点难,我来作更详细的解释:
先来了解一些运算符吧:
==(相等运算符)
- 功能:比较两个操作数值是否相等(非内存地址)(两个“=”)
- 返回值:
true:值相等,false:值不相等
在例子中:a == b // 判断 5 == 3 → false
&&(逻辑与运算符)
-
功能:检查所有条件是否同时成立
-
真值表:
条件A 条件B A && B true true true true false false false true false false false false 在例子中:(12 > 10) && (5 == 3) → (true) && (false) → false
-
补充:短路求值:当左操作数为
false时,不会计算右操作数
在例子中:假设(9 > 10)&& (5 == 3) → (false) → 不会再比较(5 == 3)→ 直接得出false
||(逻辑或运算符)
-
功能:检查至少一个条件是否成立
-
真值表:
条件A 条件B A || B true true true true false true false true true false false false -
补充:短路求值:当左操作数为
true时,不会计算右操作数
在例子中:假设(12 > 10)|| (5 == 3) → (true) → 不会再比较(5 == 3)→ 直接得出true
你可以简记🎯:&& → 有假则假;|| → 有真则真
再回头看例子,相信你不会觉得它再难了
3. switch语句
switch 语句根据与匹配表达式 匹配的模式来选择要执行的语句列表
3.1 基础结构
switch (表达式)
{
case 常量值1:
// 代码块1
break;
case 常量值2:
// 代码块2
break;
// ... 更多 case ...
default:
// 默认代码块
break;
}
规则:
表达式:可以是整数、字符、字符串等(C# 7.0后支持任何类型)case后必须跟一个常量表达式(如数字、字符串字面量)- 每个
case块必须以break(或return、throw)结束 default块可省略
举个例子吧:(希望你没有忘记上一篇的函数)
//函数DisplayNum
void DisplayNum(int num)
{
switch (num)
{
case < 10:
Console.WriteLine($"small num value is {num}");
break;
case < 15:
Console.WriteLine($"big num value is {num}");
break;
case 30:
Console.WriteLine($"only num value is {num}");
break;
default:
Console.WriteLine($"wrong num value is {num}");
break;
}
}

在例子中,我调用了函数DisplayNum,并给了一个值:5,之后的流程是:
- 检查
< 10:5 < 10 → 匹配 - 输出
small num value is 5 - 执行
break跳出 switch
其他值测试我就列一个表格啦:
| 输入值 | 匹配情况 | 输出 |
|---|---|---|
| 5 | case < 10 | small num value is 5 |
| 12 | case < 15 | big num value is 12 |
| 30 | case 30 | only num value is 30 |
| 18 | default | wrong num value is 18 |
关于switch的重要规则
- 从上到下顺序匹配:第一个满足条件的
case会被执行
因为这个规则,所以你要避免一个错误:
错误1:重复匹配
switch (num)
{
case > 0: // 匹配所有正数
case > 10: // 永远不会执行(已被前一个case匹配)
}
// 错误2:错误顺序
switch (num)
{
case < 100: // 优先匹配了<100的数
case < 50: // 永远不会执行
}
3.2 多case模式
一种特殊的 switch 语法技巧:多个 case 共享同一个执行块。
举例如下:
✅ 执行流程规则:
- 只要匹配任意一个前置的
case标签(本例中是<10或>30) - 就执行这些
case后面第一个带代码的执行块 - 直到遇到
break(或return/goto)
//函数DisplayNum
void DisplayNum(int num)
{
switch (num)
{
case < 10:
case > 30:
Console.WriteLine($"big num value is {num}");
break;
default:
Console.WriteLine($"wrong num value is {num}");
break;
}
}
DisplayNum(5);

3.3 Case guard
case 模式可能表达功能不够,无法指定用于执行 switch 部分的条件。
在这种情况下,可以使用 case guard。 这是一个附加条件,必须与匹配模式同时满足。
case guard 必须是布尔表达式。 可以在模式后面的 when 关键字之后指定一个 case guard
举例如下:
//函数DisplayNum
void DisplayNum(int a, int b)
{
switch ((a, b))
{
// case guard 用法
case ( > 0, > 0) when a == b: // 模式 + 附加条件
Console.WriteLine($"Both num are valid and equal to {a}.");
break;
case ( > 0, > 0): // 基本模式匹配
Console.WriteLine($"First num is {a}, second num is {b}.");
break;
default:
Console.WriteLine("One or both num are not valid.");
break;
}
}
DisplayNum(3, 4);
DisplayNum(5, 5);

学到了这里,咱俩真棒,记得按时吃饭(最近很爱吃宫保鸡丁盖饭~)
【本篇结束,新的知识会不定时补充】
感谢你的阅读!如果内容有帮助,欢迎 点赞❤️ + 收藏⭐ + 关注 支持! 😊
1706

被折叠的 条评论
为什么被折叠?



