【C#基础】C# 常用语句讲解

简介: 编程语言 C# 常用语句的讲解。

前言

:blush:大家好,我是writer桑,前面一章已经学习了 C# 中运算符的使用,那本章就开始学习 C# 程序中的常用语句吧,希望看完大家能够有所收获,感谢支持!

语句概念

程序的执行操作使用语句表示,常见的语句操作包括声明迭代、判断语句、调用方法,以及根据给定条件跳转到另一个代码块等。语句在程序中的执行顺序称为 "控制流" 或 "执行流", 也即程序根据语句执行着不同的操作。

1,迭代语句

迭代语句是反复执行的语句或语句块,直到满足某些条件为止,其中包括 for 语句、foreach 语句、do 语句和 while 语句 。使用迭代语句实现重复控制结构时,在迭代语句中的任何地方,都可以使用 break 语句跳出当前所在循环,或者使用 continue 语句进行循环的下一个迭代。

1.1 for 语句

for 语句内指定的条件判断为 true 时,for 语句会执行一次循环体的内容,直到条件判断为 false 时会结束循环。实现一个小于5的计数器例子,借此来讨论 for 语句的语法。

示例如下:

for (int i = 0; i < 5;i++)     // 初始化表达式;条件判断;迭代部分
{
    Console.WriteLine(i);       // 循环体的声明 
} 

上述示例展示了 for 语句的构成部分:

  • "初始化表达式" 部分仅在进入循环前执行一次。通常在该部分中声明并初始化局部循环变量,但不能从 for 语句外部访问声明的变量。

上例中的"初始化表达式"部分声明并初始化了 int 类型的变量 i :

int i = 0;
  • "条件判断" 部分是用来确定是否应执行循环中的下一个迭代。如果判断结果为 true 或为 null, 则执行下一个迭代,否则退出循环。注意条件判断部分必须为布尔表达式。

上例中的"条件判断"部分表示判断变量 i 是否小于 5:

i < 5;
  • "迭代部分" 是在循环体每次执行完后再执行的操作。

上例中的"迭代部分"使用增量运算符表示每次执行完变量 i 加1:

i++
  • "循环体"部分是 for 语句每次循环需要执行的内容,同时"循环体"部分必须是一个语句或代码块。

上例中的"循环体"部分在每次循环中输出变量 i:

Console.WriteLine(i);

for 语句流程图:
在这里插入图片描述

注意,for 语句的所有部分都是可选的, 可以在 for 语句的外部声明上述的三个部分,但是如果缺少部分声明可能会造成无限 for 循环。

示例如下:

// 报错,省略初始化部分 
for(; i < 5; i++)
{
    Console.WriteLine(i);
}
// 死循环,省略条件判断部分 
for (int j = 1; ; j++)
{
    Console.WriteLine(j);
}
// 死循环,省略迭代部分 
for (int k = 1; k < 5;)
{
    Console.WriteLine(k);
}
// 三个部分都省略
for (; ; )
{
    // 死循环...
}

1.2 foreach 语句

foreach 语句用于列举出迭代对象中所有的元素,foreach 语句中的表达式由关键字 in 隔开的两个项组成。in 右边的项是可迭代对象,in 左边的项是只读变量,用来存放该集合中的每个元素。 借一个简单的示例讨论 foreach 语句的语法。

示例如下:

// 可迭代对象 fibNumbers 
var fibNumbers = new List<int> { 0, 1, 1, 2, 3, 5, 8, 13 };

foreach (int element in fibNumbers)     // 只读变量 element 
{
    Console.Write($"{element} ");        // 循环体 
} 

// 输出: 
// 0 1 1 2 3 5 8 13 

上述示例展示了 foreach 语句的构成部分:

  • "可迭代对象" 也就是可以被 foreach 语句迭代的对象,当一个对象实现了 GetEnumerator 方法且具有公共 Current 属性和公共无参数 MoveNext 方法时,这个对象就可以被 foreach 语句迭代。

上例中的"可迭代对象"声明了一个 List 类型的元素 fibNumbers,并存放了一些数字元素:

var fibNumbers = new List<int> { 0, 1, 1, 2, 3, 5, 8, 13 };
  • "只读变量"是在循环中接收迭代对象中的元素,可迭代对象中的每个元素都会依次赋值给只读变量。可以在循环体中对只读变量进行操作。

上例中的"迭代元素"声明了一个 int 类型的变量 element :

int element in fibNumbers
  • "循环体"部分是 foreach 语句每次循环需要执行的内容,同时"循环体"部分必须是一个语句或代码块。

上例中的"循环体"部分在每次循环中输出变量 element:

Console.Write($"{element} ");        // 循环体 

foreach 语句流程图:
在这里插入图片描述


1.3 while 语句

while 语句是当指定的布尔表达式的计算结果为 true 时,while 语句就会执行一条语句或一个语句块。 由于在每次执行循环之前都会计算布尔表达式, 所以 while 循环会执行零次或多次。借一个例子讨论 while 语句的语法。

示例如下:

int n = 0;

while (n < 5)
{
    Console.WriteLine(n);   // 循环体 
    n++;
}

// 输出: 
// 01234

上述示例展示了 while 语句的构成部分:

  • "布尔表达式"部分是 while 语句每次循环执行之前需要计算的结果,若结果为 true 则执行循环体,反之则退出循环。

上例中的"布尔表达式"声明了 int 类型的变量 n 并判断是否小于5:

while (n < 5)
  • "循环体"部分是 while 语句每次循环需要执行的语句内容,同时"循环体"部分必须是一个语句或代码块。

上例中的"循环体"部分在每次循环中输出整数变量 n,并令 n 自增:

Console.WriteLine(n);   // 循环体 
n++;

while 语句流程图:
在这里插入图片描述


1.4 do 语句

do 语句会先执行一次循环体中的语句,再判断 while 语句中布尔表达式是否为真, 如果条件判断为真则继续循环,反之则终止循环。 由于在每次执行循环之后都会计算布尔表达式,所以 do 循环会执行一次或多次,注意不同于 while 循环是执行零次或多次。 借一个简单的例子讨论 do 语句的语法。

示 例:

int n = 0;        // 声明整数 n

do
{
    Console.Write(n);    // 循环体 
    n++;
} while (n < 5);        // while 条件判断式 

// 输出: 
// 01234 

上述示例展示了 do 语句的构成部分:

  • "循环体"部分跟 while 语句一样, 表示每次判断为 true 时需要执行的语句,同时"循环体"部分必须是一个语句或代码块。

上例中的"循环体"部分在每次循环中输出整数变量 n,并令 n 自增:

Console.Write(n);    // 循环体 
n++;
  • do 语句的"布尔表达式"部分与 while 语句没有区别。表示 while 语句每次循环执行之前需要计算的结果,若结果为 true 则执行循环体,反之则结束循环。

上例中的"布尔表达式"声明了 int 类型的变量 n 并判断是否小于5:

while (n < 5);

do 语句流程图:
在这里插入图片描述

2,选择语句

选择语句是根据表达式的值从许多可能的路径中选择要执行的语句,其中包括 if 、else 和 switch 语句。 if 语句可与 else 结合使用,基于布尔表达式选择不同的路径。语句 switch 根据与表达式的模式匹配要执行的语句列表。

2.1,if 语句

if 语句由一个布尔表达式和一个或多个语句组成。 if 语句是在布尔表达式计算结果为 true 时执行指定的语句部分,计算结果为 false 时则语句结束。借一个示例来讨论 if 语句的语法。

示例如下:

int value = 100; 

if (value < 0 || value > 100)
{
    Console.Write($"{value}小于0或者大于100");
}

if 语句的构成部分:

  • "布尔表达式"计算结果为 true 则执行指定的语句,计算结果为 false 则什么都不执行。

上例中的布尔表达式声明了 int 类型变量 value 是否小于0或大于 100:

(value < 0 || value > 100)
  • if 语句的执行部分由一个或多个语句构成,仅在布尔表达式计算结果为 true 时执行。

上例中的语句执行部分将输出 value 变量:

Console.Write($"{value}小于0或者大于100");

if 语句的流程图:
在这里插入图片描述

2.2,else 语句

else 语句与 if 语句搭配,else 语句在 if 语句的布尔表达式计算结果为 false 时执行。 借一个示例来讨论 else 语句的语法。

示例如下:

int number = 20;

if (number < 20)        // 结果为 true 时执行 
{
    Console.WriteLine("number小于20");
}
else                   // 结果为 false 时执行  
{
    Console.WriteLine("number大于等于20");
} 

else 语句的构成部分:

  • 当 if 语句的布尔表达式为 false 时执行 else 中的一个或多个语句的执行部分。

上例中的 else 语句的执行部分输出 number 变量大于等于20的提示信息:

Console.WriteLine("number大于等于20");

if...else 语句的流程图:
在这里插入图片描述

2.3,switch 语句

switch 语句根据给定的表达式参数与 case 关键字声明的匹配表达式匹配时,对应的匹配模式会执行指定的一个或多个语句的执行部分。以一个示例来说明 switch 语句的语法。

示例如下:

double measurement = 1.1;        // 声明测量值

switch (measurement)    // switch(表达式参数)
{
    // case 匹配表达式 
    case < 0.0:
        Console.WriteLine($"测量值为{measurement},太低了");
        break;
    case > 15.0:
        Console.WriteLine($"测量值为{measurement},太高了");
        break;
    case double.NaN:
        Console.WriteLine("失败的测量值。");
        break;
    default:        // 默认部分
        Console.WriteLine($"测量值为{measurement}.");
        break; 
}

switch 语句的构成部分:

  • 参数表达式部分必须是一个整型或枚举类型,又或者是可以转换为整型或枚举类型的 class 类型。 参数用于与 switch 语句内的 case 语句匹配。

上例的参数表达式部分声明了一个 double 类型的变量 measurement:

double measurement = 1.1;        // 声明测量值

switch (measurement)    // switch(表达式参数)
  • 匹配表达式部分表示一个匹配的条件,使用 case 关键字声明。switch 语句可以有多个 case 语句,当匹配表达式布尔值为 true 时则执行对应的语句部分,若布尔值为 false 时则直接执行下一个匹配部分直到 switch 语句结束。

上例的匹配表达式部分声明了三个 case 语句:

// case 匹配表达式 
case < 0.0:
    //...
case > 15.0:
    //...
case double.NaN:
    //...
  • "执行语句"部分即匹配结果为 true 时执行的语句,注意 C# 不支持从一个 case 标签显式贯穿到另一个 case 标签, 所以在 case 执行语句不为空的情况下需要声明 break 或其它跳转语句。

上例中的执行语句部分输出了 measurement 变量的提示信息和 break 语句 :

case < 0.0:
   Console.WriteLine($"测量值为{measurement},太低了");
    break;
case > 15.0:
    Console.WriteLine($"测量值为{measurement},太高了");
    break;
case double.NaN:
    Console.WriteLine("失败的测量值。");
    break;
  • default 语句是在 switch 语句末尾声明的一个可选的语句,表示在上面所有的 case 匹配结果都不为 true 时执行的语句。 当 switch 语句中的 case 匹配结果都不为 true 且没有 default 语句的时候会直接结束 switch语句。

上例中的 default 语句的执行部分输出 measurement 变量的提示信息和 break 语句:

Console.WriteLine($"测量值为{measurement}."); 
break; 

switch 语句的流程图:
在这里插入图片描述

3,跳转语句

跳转语句表示可以中断当前程序流,并从一个程序点跳转到另外一个程序点继续执行程序。C# 支持的跳转语句包括 break 语句、continue 语句、return 语句和 goto 语句。

3.1 break 语句

break 语句是将终止当前所在的迭代语句。包括上面所讲到的 for、foreach、while 或 do 语句以及 switch 语句。break 语句可以直接停止迭代语句的执行,并把执行权给后面的程序或者直接结束程序。 以一个示例来演示 break 语句的语法。

示例如下:

int[] numbers = { 1, 2, 3, 4, 5, 6 }; 
        
foreach(int number in numbers)
{
    if(number == 3)
    {
        break;        // 跳出当前 foreach 语句
    }

    Console.WriteLine($"{number}");
}
// 输出: 
// 1 
// 2

break 语句的流程图:
在这里插入图片描述

3.2 continue 语句

continue 语句与 break 语句不同的是 continue 语句只跳过当前循环直接进入下一次循环,而 break 语句是跳出整个循环。 continue 语句常用于 while 循环和 for 循环中。 以一个示例来演示 continue 语句的语法。

示例如下:

for (int i = 0; i < 5; i++)
{
    Console.Write($"Iteration {i}: ");

    if (i < 3)
    {
        Console.WriteLine("skip");
        continue;
    }

    Console.WriteLine("done");
}

// 输出: 
// Iteration 0: skip
// Iteration 1: skip
// Iteration 2: skip
// Iteration 3: done
// Iteration 4: done

continue 语句的流程图:
在这里插入图片描述

3.3 goto 语句

goto 语句将控制权转交给带有标签的语句,实现程序从一个点跳转到另外一个程序点执行。 以一个示例来理解 goto 语句。

示例如下:

// 局部变量定义 
int a = 10;

LOOP: do
{
    if (a == 15)
    {
        // 直接跳过迭代
        a++;
        goto LOOP;
    }

    Console.WriteLine($"a 的值:{a}");
    a++; 

} while (a < 20);

// 输出: 
/*
    a 的值:10
    a 的值:11
    a 的值:12
    a 的值:13
    a 的值:14
    a 的值:16
    a 的值:17
    a 的值:18
    a 的值:19 
*/
注意无论什么编程语言,都不建议使用 goto 语句。因为 goto 语句使得程序的控制流难以跟踪,使程序难以理解和难以修改。而且任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法。(示例中的功能可以使用 continue 语句实现)

goto 语句的流程图:

3.4 return 语句

return 语句的执行表示函数的结束,并将控制权和函数结果(若有)返回给函数的调用方,在 C# 中 return 语句的返回值的类型必须和函数的返回类型相同 。return 语句是函数的一个可选项,函数中不是一定要有 return 语句。如果函数成员不计算值,则使用不带表达式的 return 语句。 以一个示例来理解 return 语句。

示例如下:

Console.WriteLine("First call:");
DisplayIfNecessary(6);

Console.WriteLine("Second call:");
DisplayIfNecessary(5);

void DisplayIfNecessary(int number)
{
    if (number % 2 == 0)
    {
        return;
    }
    Console.WriteLine(number);
}
// 输出: 
//First call:
//Second call:
//5 

结语

:grinning:以上就是 C# 常用语句的介绍,希望能够对大家有所帮助。望大家多多支持,你们的支持就是笔者创作最大的动力!
目录
相关文章
|
SQL 存储 数据库
SQL语句中,如何使用含有if....else...判断语句
SQL语句中,如何使用含有if....else...判断语句
82 0
|
SQL 测试技术 数据处理
SQL语法基础——SQL查询语句的执行顺序解析(建议收藏)
SQL语法基础——SQL查询语句的执行顺序解析(建议收藏)
|
算法 C语言
if语句基础
if语句基础
|
搜索推荐 索引
|
SQL 存储 缓存
MySQL数据库4种常用优化方式,sql语句书写优化规范
MySQL数据库4种常用优化方式,sql语句书写优化规范
194 0
MySQL数据库4种常用优化方式,sql语句书写优化规范
SQL语言基础操作之逻辑语句
上期回顾 上次的基础操作中我们过了一遍sql语言表操作中最基本的所有命令,包括了表的创建、数据的插入和查询、重复数据的去除等操作。 本期我们就要开始引入逻辑相关的操作命令了:
SQL语言基础操作之逻辑语句
|
JavaScript 前端开发 Java
原生基础的判断语句中switch语句和if else if语句的区别
原生基础的判断语句中switch语句和if else if语句的区别
136 0
|
SQL 存储 Oracle
SQL不完全手册(一):概念和基础语句
SQL不完全手册(一):概念和基础语句
SQL不完全手册(一):概念和基础语句
|
关系型数据库 MySQL
Mysql查询语句之连表查询和增删改查语句补充
Mysql查询语句之连表查询和增删改查语句补充
188 0
Mysql查询语句之连表查询和增删改查语句补充