C#知识学习-004(选择语句)

简单了解一下选择语句吧: 

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 结构类型的别名。

布尔值是一个变量,可以是两个值之一:truefalse,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条件BA && B
    truetruetrue
    truefalsefalse
    falsetruefalse
    falsefalsefalse

    在例子中:(12 > 10) && (5 == 3) → (true) && (false) → false

  • 补充:​​短路求值​​:当左操作数为 false 时,​​不会计算右操作数

在例子中:假设(9 > 10)&& (5 == 3) → (false) → 不会再比较(5 == 3)→ 直接得出false

||(逻辑或运算符)

  • 功能​​:检查​​至少一个条件是否成立​

  • ​真值表​​:

    条件A条件BA || B
    truetruetrue
    truefalsetrue
    falsetruetrue
    falsefalsefalse
  • 补充:​​短路求值​​:当左操作数为 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(或 returnthrow)结束
  • 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,之后的流程是:

  1. 检查 < 10:5 < 10 → ​​匹配​
  2. 输出 small num value is 5
  3. 执行 break 跳出 switch

其他值测试我就列一个表格啦:

输入值匹配情况输出
5case < 10small num value is 5
12case < 15big num value is 12
30case 30only num value is 30
18defaultwrong 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 共享同一个执行块​​。

举例如下:

✅ 执行流程规则:

  1. 只要匹配​​任意一个​​前置的 case 标签(本例中是 <10 或 >30
  2. 就执行这些 case ​​后面第一个带代码的执行块​
  3. 直到遇到 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);

 学到了这里,咱俩真棒,记得按时吃饭(最近很爱吃宫保鸡丁盖饭~)

【本篇结束,新的知识会不定时补充】

感谢你的阅读!如果内容有帮助,欢迎 ​​点赞❤️ + 收藏⭐ + 关注​​ 支持! 😊

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值