【深入浅出C#】章节 3: 控制流和循环:条件语句
条件语句是编程中一种常用的控制结构,用于根据给定的条件来执行不同的代码块。它基于条件的真假来决定程序的执行路径,使程序能够根据不同的情况采取不同的行动。条件语句的作用在于根据特定的条件来控制程序的行为,使程序能够根据不同的情况做出不同的决策和响应。
条件语句在程序中非常重要,它使程序具备了灵活性和可控性。通过使用条件语句,我们可以根据不同的条件执行不同的代码逻辑,从而实现更精确的控制和处理。它允许程序根据输入、状态或其他条件来动态地做出决策,适应不同的情况和需求。
条件语句的重要性还体现在错误处理、逻辑判断、流程控制和业务逻辑的实现上。它能够帮助我们处理边界条件、异常情况和不同的用户输入,使程序更加健壮和可靠。同时,条件语句也能够优化程序的执行效率,避免不必要的计算和重复操作。
一、if语句
1.1 语法和基本用法
if语句是C#中最基本的条件语句,用于根据给定的条件执行特定的代码块。它的语法结构如下:
if (条件)
{// 条件为真时执行的代码块
}
解释:
if
关键字指示条件语句的开始。条件
是一个布尔表达式,用于判断条件的真假。如果条件为真,那么代码块中的代码将被执行;如果条件为假,那么代码块中的代码将被跳过。
基本用法:
- 如果条件为真,if语句中的代码块将被执行;如果条件为假,则代码块将被跳过。
- if语句可以单独使用,也可以嵌套在其他条件语句或循环中。
- 在代码块中,可以编写需要根据条件执行的任意代码逻辑。
示例:
int x = 10;
if (x > 5)
{Console.WriteLine("x大于5");
}
在这个例子中,如果变量x
的值大于5,那么控制台将输出"x大于5"。否则,代码块中的代码将被跳过。
1.2 条件表达式和布尔值的使用
在if语句中,条件表达式是一个用于判断真假的表达式,它可以是一个布尔表达式或返回布尔值的表达式。条件表达式的结果决定了代码块是否执行。
条件表达式通常由以下几种情况组成:
- 关系运算符:例如
>
、<
、>=
、<=
等,用于比较两个值的大小关系。 - 相等运算符:例如
==
、!=
等,用于比较两个值是否相等。 - 逻辑运算符:例如
&&
、||
、!
等,用于组合多个条件或取反操作。
布尔值是一种只能取true
或false
的数据类型,它用于表示真假或逻辑判断的结果。在条件语句中,条件表达式的结果必须是布尔值,因为if语句根据条件的真假来决定是否执行代码块。
示例:
int x = 10;
bool condition = x > 5; // 条件表达式,判断x是否大于5
if (condition) // 使用条件表达式作为if语句的条件
{Console.WriteLine("x大于5");
}
在这个例子中,条件表达式x > 5
将返回一个布尔值(true
或false
),根据该值来决定是否执行代码块。
Tip:在if语句中使用条件表达式和布尔值是为了实现根据不同的条件来控制程序的执行流程。通过合理地构建条件表达式,我们可以根据不同的情况执行相应的代码逻辑,提高程序的灵活性和可读性。
二、if-else语句
2.1 语法和基本用法
if-else语句是一种用于在程序中进行条件分支的控制结构。它允许根据条件的真假执行不同的代码块。if-else语句的基本语法如下:
if (condition)
{// 当条件为真时执行的代码块
}
else
{// 当条件为假时执行的代码块
}
其中,condition
是一个条件表达式,用于判断条件的真假。如果条件为真,则执行if代码块中的语句;如果条件为假,则执行else代码块中的语句。
示例:
int x = 10;
if (x > 5)
{Console.WriteLine("x大于5");
}
else
{Console.WriteLine("x不大于5");
}
在这个例子中,如果x
的值大于5,将输出"x大于5";否则,将输出"x不大于5"。
Tip:if-else语句允许根据不同的条件执行不同的代码逻辑,它在程序中的应用非常广泛。通过合理地使用if-else语句,我们可以根据不同的情况做出不同的处理,实现灵活的程序控制流程。
2.2 逻辑判断流程
if-else语句是一种逻辑判断结构,根据条件的真假决定执行不同的代码块。其逻辑判断流程如下:
- 首先,判断条件表达式的真假。条件表达式可以是任何返回布尔值的表达式,例如比较表达式、逻辑表达式等。
- 如果条件表达式为真,执行if代码块中的语句。if代码块是在条件为真时执行的代码块,它可以包含一个或多个语句。
- 如果条件表达式为假,跳过if代码块,执行else代码块中的语句(如果存在)。else代码块是在条件为假时执行的代码块,它也可以包含一个或多个语句。
- 执行完if或else代码块后,程序继续执行if-else语句之后的代码。
示例:
int x = 10;
if (x > 5)
{Console.WriteLine("x大于5");
}
else
{Console.WriteLine("x不大于5");
}
在这个例子中,首先判断x > 5
的条件表达式。由于x
的值为10,满足条件,因此执行if代码块中的语句,输出"x大于5"。如果x
的值为3,则不满足条件,跳过if代码块,执行else代码块中的语句,输出"x不大于5"。
三、嵌套if语句
3.1 语法和基本用法
嵌套if语句是在一个if语句的代码块中嵌套使用另一个if语句,以实现更复杂的条件判断逻辑。它的语法和基本用法如下:
if (condition1)
{// 执行一些代码if (condition2){// 执行一些代码}else{// 执行一些代码}
}
else
{// 执行一些代码
}
嵌套if语句的结构可以包含多个if语句,每个if语句根据自己的条件表达式来进行判断。在嵌套if语句中,内层的if语句是根据外层if语句的条件表达式的真假来执行的。使用嵌套if语句,我们可以根据多个条件来进行复杂的逻辑判断。内层if语句的执行结果会根据外层if语句的条件表达式的真假来决定是否执行。这样可以根据不同的条件组合来执行不同的代码逻辑。
示例:
int x = 10;
int y = 5;if (x > 0)
{if (y > 0){Console.WriteLine("x和y都大于0");}else{Console.WriteLine("x大于0,但y不大于0");}
}
else
{Console.WriteLine("x不大于0");
}
在这个例子中,外层if语句判断x > 0
的条件表达式。如果条件为真,则进入内层if语句,判断y > 0
的条件表达式。如果内层if语句的条件也为真,则输出"x和y都大于0";如果内层if语句的条件为假,则输出"x大于0,但y不大于0"。如果外层if语句的条件为假,则直接输出"x不大于0"。
四、else if语句
4.1 语法和基本用法
else if语句是在if语句的条件不满足的情况下进行额外条件判断的一种结构。它的语法和基本用法如下:
if (condition1)
{// 执行一些代码
}
else if (condition2)
{// 执行一些代码
}
else if (condition3)
{// 执行一些代码
}
else
{// 执行一些代码
}
else if语句必须跟在if语句或上一个else if语句之后,并且可以根据需要连续添加多个else if语句。每个else if语句都有自己的条件表达式,只有在前面的条件不满足时才会执行。
使用else if语句,我们可以实现多个条件的判断,并根据不同的条件执行不同的代码逻辑。在多个else if语句中,只有满足第一个为真的条件时,其后的else if语句都会被忽略。
示例:
int num = 10;if (num > 0)
{Console.WriteLine("num大于0");
}
else if (num == 0)
{Console.WriteLine("num等于0");
}
else if (num < 0)
{Console.WriteLine("num小于0");
}
else
{Console.WriteLine("无法确定num的值");
}
在这个例子中,首先判断num > 0
的条件是否为真,如果是,则输出"num大于0"。如果不是,则继续判断num == 0
的条件是否为真,如果是,则输出"num等于0"。如果前两个条件都不满足,则执行最后一个else语句,输出"无法确定num的值"。
Tip:通过使用else if语句,我们可以根据多个条件进行逐一判断,并根据不同的条件执行相应的代码逻辑。这样可以实现更复杂的条件判断和控制流程。
五、switch语句
5.1 语法和基本用法
switch语句是一种用于根据不同的条件执行不同代码块的流程控制语句。它的语法和基本用法如下:
switch (expression)
{case value1:// 执行一些代码break;case value2:// 执行一些代码break;case value3:// 执行一些代码break;default:// 执行一些代码break;
}
在switch语句中,首先需要提供一个表达式(expression),它的值将被用来与每个case语句中的值进行比较。每个case语句后面跟着一个冒号,然后是一些要执行的代码。如果表达式的值与某个case语句的值匹配,那么该case语句中的代码将会被执行。
在每个case语句的末尾需要使用break语句来终止switch语句的执行。如果没有break语句,程序将会继续执行后续的case语句,直到遇到break语句或switch语句结束。
如果表达式的值与任何一个case语句的值都不匹配,那么将会执行default语句中的代码。default语句是可选的,用于处理未匹配的情况。
示例:
int dayOfWeek = 3;
string dayName;switch (dayOfWeek)
{case 1:dayName = "Monday";break;case 2:dayName = "Tuesday";break;case 3:dayName = "Wednesday";break;case 4:dayName = "Thursday";break;case 5:dayName = "Friday";break;default:dayName = "Invalid day";break;
}Console.WriteLine("Today is " + dayName);
在这个例子中,根据dayOfWeek
的值,使用switch语句选择对应的dayName
。当dayOfWeek
的值为3时,与case 3匹配,执行其中的代码,将dayName
设置为"Wednesday"。最后,输出"Today is Wednesday"。
5.2 条件匹配和执行流程
条件匹配和执行流程是指在条件语句中根据条件的不同进行匹配和执行的过程。具体流程如下:
- 条件匹配:首先,条件语句会根据给定的条件表达式进行匹配。条件表达式的结果应为布尔值(true或false)。
- 匹配成功:如果条件表达式的结果与某个条件匹配(比如if语句中的条件为true),那么与该条件相对应的代码块将会被执行。在if语句中,如果条件匹配,则执行if代码块中的语句。
- 匹配失败:如果条件表达式的结果与所有条件都不匹配(比如if语句中的条件为false),那么将会跳过与条件相对应的代码块。
- 可选的else语句:如果在条件语句中使用了else或else if语句,那么在所有条件都不匹配的情况下,将会执行与else语句关联的代码块。
- 执行流程:根据条件匹配的结果,程序会按照匹配的条件顺序执行对应的代码块。在执行完一个代码块后,程序将跳过其它条件的判断,并继续执行后续的代码。
Tip:通过条件匹配和执行流程,我们可以根据不同的条件选择不同的代码执行路径,从而实现程序的灵活性和逻辑控制。条件语句提供了一种在不同情况下执行不同代码的机制,使得程序能够根据特定的条件进行适当的处理。这在处理用户输入、业务逻辑判断等方面非常有用,为程序带来了更高的灵活性和可控性。
六、三元运算符
6.1 语法和基本用法
三元运算符是一种简洁的条件表达式,它允许根据条件的真假选择不同的值进行赋值。其语法形式为:
条件 ? 值1 : 值2
- 条件:一个布尔表达式,用于判断条件的真假。
- 值1:当条件为真时要返回的值。
- 值2:当条件为假时要返回的值。
三元运算符的基本用法是根据条件的真假来选择返回值。如果条件为真,表达式的结果将是值1;如果条件为假,表达式的结果将是值2。
示例:
int x = 10;
int y = 5;
int max = (x > y) ? x : y;
在上述示例中,如果x大于y,则max将被赋值为x的值(10);否则,max将被赋值为y的值(5)。
Tip:三元运算符常用于简单的条件判断和赋值操作,可以使代码更加简洁和易读。然而,过度使用三元运算符可能会导致代码可读性下降,因此在使用时应慎重考虑上下文和代码清晰度。
七、注意事项和最佳实践
在使用条件语句时,以下是一些注意事项和最佳实践:
- 简洁明确的条件:确保条件表达式简洁明确,避免过于复杂的逻辑判断。这有助于提高代码的可读性和维护性。
- 谨慎处理嵌套条件:嵌套条件可能导致代码的可读性下降。尽量使用逻辑运算符和布尔表达式将条件组合在一起,以减少嵌套的层级。
- 注意条件顺序:在if-else语句或switch语句中,条件的顺序非常重要。确保条件的顺序是符合逻辑的,以避免不必要的判断和重复代码。
- 使用恰当的比较操作符:根据需要选择适当的比较操作符,如相等(==)、不等(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等。确保使用正确的操作符来比较变量的值。
- 考虑默认情况:在使用条件语句时,确保考虑到所有可能的情况,并提供适当的处理或默认值。这可以避免潜在的错误或未处理的情况。
- 编写清晰的注释:对于复杂的条件语句,编写清晰的注释有助于其他开发人员理解代码的意图和逻辑。
- 小心处理代码重复:在使用条件语句时,尽量避免代码的重复。如果有多个条件需要判断相同的逻辑,可以考虑将重复的代码提取为函数或方法,以便重复使用。
- 单一职责原则:确保条件语句中的逻辑保持单一职责原则。如果一个条件语句涵盖了过多的逻辑,可以考虑将其拆分为多个条件语句或使用其他控制结构来提高代码的可读性。
八、总结
条件语句是编程中常用的控制结构,用于根据条件的满足与否执行不同的代码块。通过条件语句,我们可以根据程序运行时的情况来做出决策和控制程序的执行流程。在使用条件语句时,需要注意编写简洁明确的条件表达式、谨慎处理嵌套条件、注意条件顺序、使用恰当的比较操作符、考虑默认情况等。此外,应该编写清晰的注释,避免代码重复,并确保条件语句中的逻辑保持单一职责原则。通过遵循这些最佳实践,可以编写出高质量、可读性强且易于维护的条件语句。条件语句在程序开发中扮演着重要的角色,它使得我们能够根据不同的情况执行不同的代码逻辑,提高程序的灵活性和可靠性。
相关文章:
【深入浅出C#】章节 3: 控制流和循环:条件语句
条件语句是编程中一种常用的控制结构,用于根据给定的条件来执行不同的代码块。它基于条件的真假来决定程序的执行路径,使程序能够根据不同的情况采取不同的行动。条件语句的作用在于根据特定的条件来控制程序的行为,使程序能够根据不同的情况…...

Java框架学习--Spring
1.Spring概念【托管很多对象的框架】 一个包含了众多工具方法的IoC容器。 1.1 什么是容器? 容器是用来容纳各种物品的(基本)装置。--来自百度百科 之前常见的容器有: List/Map-》数据存储容器 Tomcat-》Web容器 1.2什么是IoC? IoCInve…...
【爬虫】Xpath和CSS信息提取的方法异同点
类似点: Xpath与css都有web页面定位元素的功能Xpath与css结构类似 区别: 1. Xpath比较强大,而css选择器在性能上更优,运行速度更快,语法更简洁 CSS再chrome,火狐查找速度快,效率高࿰…...

数字IC前端学习笔记:FIFO的Verilog实现(二)
相关文章 数字IC前端学习笔记:LSFR(线性反馈移位寄存器) 数字IC前端学习笔记:跨时钟域信号同步 数字IC前端学习笔记:信号同步和边沿检测 数字IC前端学习笔记:锁存器Latch的综合 数字IC前端学习笔记&am…...
2.2 搭建Spark开发环境
一、Spark开发环境准备工作 由于Spark仅仅是一种计算框架,不负责数据的存储和管理,因此,通常都会将Spark和Hadoop进行统一部署,由Hadoop中的HDFS、HBase等组件负责数据的存储管理,Spark负责数据计算。 安装Spark集群前…...

webpack指定输出资源的路径和名称
如图,在前面的章节我们打包后的文件默认都输出到了dist目录下,无论是图片、还是js都在同一级别目录,这里目前处理的资源比较少,如果资源一多,所有的资源都在同一级目录,看起来很费劲。 那么这节就介绍一下…...
Spring事务四
spring 事务的隔离级别 当多个事务同时访问数据库中的同一数据时,可能会出现数据不一致的情况,为了避免这种情况发生,就需要使用事务隔离机制。Spring框架中定义了5种事务隔离级别,分别为: DEFAULT(默认隔…...

项目管理专业人员能力评价等级证书(CSPM)的级别介绍
2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…...
设计模式-创建型模式(单例、工厂、建造、原型)
Concept-概念前置 设计模式:软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。 面向对象三大特性:封装、继承、多态。 面向对象设计的SOLID原则: (1)开放封闭原则&#…...

用饭店来形象比喻线程池的工作原理
一、线程池解决的问题? 使用线程池主要解决在程序中频繁创建和销毁线程导致的资源浪费,线程池可以维护一定量的线程来执行所需要的任务,维护的线程也可以重复使用。 二、用形象的饭店来解释工作原理 线程池就相当于一家饭店, 任…...
GO学习笔记之表达式
GO学习笔记之表达式 保留字运算符优先级二元运算符位运算符自增指针 保留字 Go语言仅25个保留关键字(keyword),这是最常见的宣传语,虽不是主流语言中最少的,但也确实体现了Go语法规则的简洁性。保留关键字不能用作常量…...

005Mybatis返回值(ResultMap 一对多,多对多)
属性 id 应该总是指定一个或多个可以唯一标识结果的属性。 虽然,即使不指定这个属性,MyBatis 仍然可以工作,但是会产生严重的性能问题。 只需要指定可以唯一标识结果的最少属性。显然,你可以选择主键(复合主键也可以…...

把玩数据在内存中的存储
前言:时光如梭💦,今天到了C语言进阶啦😎,基础知识我们已经有了初步认识, 是时候该拔高拔高自己了😼。 目标:掌握浮点数在内存的存储,整形在内存的存储。 鸡汤:…...

Nginx运行原理与基本配置文件讲解
文章目录 Nginx基本运行原理Nginx的基本配置文件serverlocationroot 与 alias 的区别server 和 location 中的 rootnginx欢迎页 本文参考文章Nginx相关文章 Nginx基本运行原理 Nginx的进程是使用经典的「Master-Worker」模型,Nginx在启动后,会有一个master进程和多个…...

openGauss5 企业版之SQL语法和数据结构
文章目录 1.openGauss SQL 语法2. 数据类型2.1数值类型2.2 布尔类型2.3 字符类型2.4 二进制类型2.5日期/时间类型2.6 几何类型2.7 网络地址类型2.8 位串类型2.9 文本搜索类型2.10 UUID数据类型2.11 JSON/JSONB类型2.11 HLL数据类型2.12 范围类型2.13 索引2.14 对象标识符类型2.…...

TClientDataSet 模拟 EXCEL表
日常处理数据时,经常需要,从EXCEL表格中,批量导入数据,通过 XLSReadWriteII编程,会很快导入。 但是,客户提供的EXCEL表的字段,数据格式,字段的排序,有很大的区别。因此&a…...

Hazel游戏引擎(012)GLFW窗口事件
文中若有代码、术语等错误,欢迎指正 文章目录 前言如何确定GLFW窗口事件的回调函数参数Application接收事件回调流程原项目流程(12345)自己写的简单Demo与流程(123) 前言 此节目的 为了完成008计划窗口事件的接收glfw窗口事件以及回调部分 此节要完成 使用glfw函数…...
Nenu算法复习第六章
目录 补充知识点 1160: 6001 第几天? 1161: 6002 时间格式转换 1162: 6003 星期几? 1163: 6004 18岁生日、 补充知识点 闰年的判断方法: 能被四整除但是不能一百整除或者能被400整除 例题: 题目描述 经常会有人问你怎么判断闰年&…...
知识付费社群:最好的知识传播方式
知识付费是一种网络内容付费方式,它让知识传播者通过网络以付费的方式向社会大众或特定平台传递知识、技能和智力资源。 知识付费传播的成功离不开用户,他们是核心节点,也是受众和粉丝的重要组成部分。用户不仅可以生产和传播知识࿰…...

局域网内不同网段的设备互相连接设置
目录 介绍1、打开网络连接,找到本地网络->属性->ipv4->属性->高级:2、在高级设置页面,我们添加一个IP,这个IP和板子在一个网段,我这里设置的是192.168.253.101:3、设置完成即可生效,…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...

2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...

【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...