ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#教程 - 语句与表达式(Statements & Expression)

2022-09-12 08:32:18  阅读:209  来源: 互联网

标签:语句 Statements C# 代码 else using Expression 表达式


更新记录
转载请注明出处。
2022年9月12日 发布。
2022年9月10日 从笔记迁移到博客。

语句与表达式(Statements & Expression)说明

语句是一段可执行代码,不一定返回值

C#中使用;号分句,代码块{}视为语句

有;的代码不一定是语句,比如using

顶级语句(C#9.0)

1、直接在C#文件中直接编写入口方法的代码,不用类,不用Main.经典写法仍然支持。

2、同一个项目中只能有一个文件具有顶级语句。

3、顶级语句中可以直接使用await语法,也可以声明函数

表达式说明

表达式(Expression)是总有返回值的代码,所以它可写在赋值语句等号的右侧

表达式 = 操作符+操作数

代码块说明

使用{}大括号将多个语句组成代码块

规范:在控制流语句中除非只有一条语句,不然都用代码块

语句类型

image

控制流程语句(Flow Control Statement)

选择流程

if                      //1选1
if else                 //2选1
if else if else if else //多选1,可以是范围或定值
switch                  //多选1,定值

图示

if结构
image

if..else..结构
image

if..else if..else结构
image

switch结构:
image

新版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结构
image

do..while结构
image

for结构

for (init-clause; condition-clause; iteration-clause)
  statement-or-statement-block

image

跳出流程

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指令,只是符号相同

资源使用过程

分配资源

使用资源

销毁资源
image

使用using语句

在圆括号内分配资源

在大括号内使用资源,GC会自动管理资源

using(资源分配,资源分配,资源分配,....)
{
    //使用资源
}

using语句本质:

​ using本质是一种语法糖

​ 在try内分配、使用资源

​ 在finally内自动调用资源的Dispose方法释放资源

注意:

using语句中分配的对象必须可以隐式转换为IDisposable

即必须实现IDisposable接口
image

try
{
    //资源分配使用
}
catch(exception e)
{
    //处理错误
}
finally
{
    //释放资源
}

提示:可以一次性分配多个相同类型的资源
image

提示:using语句还可以进行嵌套
image

using语句另一种形式

注意:这种形式资源被释放会被释放,但没法解决引用还存在的问题
image

本质:
image

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)可以在运行时动态获取运算逻辑。而普通委托则没有。

标签:语句,Statements,C#,代码,else,using,Expression,表达式
来源: https://www.cnblogs.com/cqpanda/p/16678356.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有