C#教程 - 语句与表达式(Statements & Expression)
2022/9/13 1:25:07
本文主要是介绍C#教程 - 语句与表达式(Statements & Expression),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
更新记录
转载请注明出处。
2022年9月12日 发布。
2022年9月10日 从笔记迁移到博客。
语句与表达式(Statements & Expression)说明
语句是一段可执行代码,不一定返回值
C#中使用;号分句,代码块{}视为语句
有;的代码不一定是语句,比如using
顶级语句(C#9.0)
1、直接在C#文件中直接编写入口方法的代码,不用类,不用Main.经典写法仍然支持。
2、同一个项目中只能有一个文件具有顶级语句。
3、顶级语句中可以直接使用await语法,也可以声明函数
表达式说明
表达式(Expression)是总有返回值的代码,所以它可写在赋值语句等号的右侧
表达式 = 操作符+操作数
代码块说明
使用{}大括号将多个语句组成代码块
规范:在控制流语句中除非只有一条语句,不然都用代码块
语句类型
控制流程语句(Flow Control Statement)
选择流程
if //1选1 if else //2选1 if else if else if else //多选1,可以是范围或定值 switch //多选1,定值
图示
if结构
if..else..结构
if..else if..else结构
switch结构:
新版switch支持类型匹配和条件筛选(C#7.0):
switch (data) { case decimal decimalValue: total += decimalValue; break; case int intValue when intValue > 50: total += intValue; break; }
if语句匹配模式
C# 7.0起if支持匹配模式,支持将类型进行转换并赋值
//object o = "3"; //将执行else object o = 3; //可以转换 //检测o是否可以转为int类型 if (o is int i) { Console.WriteLine(++i); //4 } else { Console.WriteLine("Can't Convert"); }
循环流程(Iteration Statements)
for //条件确定,增量确定 foreach
注意:
必须实现了可枚举方法才可以使用foreach
foreach中不可以增加删除集合元素
while //条件不确定,增量确定 do while //至少执行一次
图示
while结构
do..while结构
for结构
for (init-clause; condition-clause; iteration-clause) statement-or-statement-block
跳出流程
break
continue
return
switch表达式(Switch expressions (C# 8))
实例:
string cardName = cardNumber switch { 13 => "King", 12 => "Queen", 11 => "Jack", _ => "Pip card" // equivalent to 'default' };
还可以使用多个变量来进行匹配
注意:本质是tuples类型
int cardNumber = 12; string suite = "spades"; string cardName = (cardNumber, suite) switch { (13, "spades") => "King of spades", (13, "clubs") => "King of clubs", ... };
using语句(using statement)
说明
某些类型实例有 非托管内容代码 或 非常消耗资源的代码
在代码使用完后为了尽快释放内存,可以使用using语句自动释放
资源是指实现了System.IDisposable接口的类或结构,该接口包含一个Dispose方法
注意:这里的using语句并不是using指令,只是符号相同
资源使用过程
分配资源
使用资源
销毁资源
使用using语句
在圆括号内分配资源
在大括号内使用资源,GC会自动管理资源
using(资源分配,资源分配,资源分配,....) { //使用资源 }
using语句本质:
using本质是一种语法糖
在try内分配、使用资源
在finally内自动调用资源的Dispose方法释放资源
注意:
using语句中分配的对象必须可以隐式转换为IDisposable
即必须实现IDisposable接口
try { //资源分配使用 } catch(exception e) { //处理错误 } finally { //释放资源 }
提示:可以一次性分配多个相同类型的资源
提示:using语句还可以进行嵌套
using语句另一种形式
注意:这种形式资源被释放会被释放,但没法解决引用还存在的问题
本质:
USING声明using declarations)(C#8)
省略using声明的()和{}即可变为using定义
注意:从C# 8开始可用
在实现了ldisposable/IAsyncDisposable接口的类型的变量声明前加上using,当代码执行离开变量的作用域时,对象就会被释放。
using Sq|Connection conn = new SqlConnection("Data Source=.;Initial Catalog=db1;Integrated Security=True"); using SqlCommand cmd = conn.CreateCommand();
实例:
using var reader = File.OpenText ("file.txt");
实例:
using FileStream fs = new FileStream ("myFile.txt", FileMode.Open);
实例:
if (File.Exists ("file.txt")) { using var reader = File.OpenText ("file.txt"); Console.WriteLine (reader.ReadLine()); ... }
在if语句完成后,using声明的资源会被自动释放。
全局USING 指令(C#10)
1、将 global 修饰符添加到 using 前,这个命名空间就应用到整个项目,不用重复using.
2、通常创建一个专门用来编写全局using代码的C#文件。
3、如果csproj中启用了<ImplicitUsings>enable</ImplicitUsings>
,编译器会自动隐式增加对于System、System.Linq等常用命名空间的引入,不同各类型项目引入的命名空间也不一样。
表达式树
说明
表达式树(Expression Tree):树形数据结构表示代码,以表示逻辑运算,以便可以在运行时访问逻辑运算的结构。
使用Expression<TDelegate>
类型。
实例:从Lambda表达式来生成表达式树
Expression<Func<Book, bool>> e1 = b =>b.Price > 5;
EXPRESSION和委托的关系和区别
Expression对象储存了运算逻辑,它把运算逻辑保存成抽象语法树(AST)可以在运行时动态获取运算逻辑。而普通委托则没有。
这篇关于C#教程 - 语句与表达式(Statements & Expression)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#