官方链接:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/statements-expressions-operators/

以下内容是网上找的,结合官方内容写出的

C#中表达式(Expression)的定义

An expression is a sequence of one or more operands and zero or moreoperators that can be evaluated to a single value, object, method, ornamespace. Expressions can consist of a literal value, a method
invocation, an operator and its operands, or a simple name. Simple
names can be the name of a variable, type member, method parameter,namespace or type.

任何能得到值的运算就是表达式。表达式经过运算之后能够产生一个值而这个值又具有自己的数据类型,所以说我们也把表达式所产生的值(很多情况下与操作符有关系)的数据类型称为这个表达式的数据类型。例如:这有一个布尔类型的表达式

最简单的 C# 表达式是文本(例如整数实数)和变量名称。可以使用运算符将它们组合成复杂的表达式。----msdn

任何表达式都有值和类型两个基本属性

C#中的表达式

C#中的表达式主要包括以下几种:

常量表达式:例如: 1、2、3、200 + 3等常量

       算术表达式:用算术运算符连接,结果是数值类型 例如:b-2

       关系表达式:用关系运算符连接,结果是布尔类型 例如:   i>5

       逻辑表达式:用逻辑运算符连接,结果是布尔类型  例如:i||j

       赋值表达式:用赋值运算符连接,运算结果的类型取决于赋值运算符左侧的运算结果。i=5

       函数(方法)调用表达式:函数也称方法,是可以完成特定功能的程序单位,通过函数调用表达式可以执行函数的特定功能,运算的结果类型取决于函数的返回值类型。 fun() 要有返回值

lambda 表达式:b=>x+1;

正则表达:Regex regex = new Regex(@"^(\w)+(\.\w)*@(\w)+((\.\w+)+)$");

switch 表达式

is 表达式

按运算符分对应一元运算符和二元运算符:

UnaryExpression; 一元运算表达式 如- - i
BinaryExpression; 二元运算表达式 x>5、x+y

C#语言对语句(Statement)的定义

. The actions that a program takes are expressed in statements. Common actions include
declaring
variables, assigning valuE, calling methods, looping through
collections, andbranching to one or another block of code, depending on a
given condition. The order inwhich statements are executed in a program
is called the flow of control or flow of execution.The flow of control
may vary every time that a program is run, depending on how the
program reacts to input that it receives at run time.

C#语言的语句除了能够让程序员"顺序地"(sequentially)表达算法思想,还能通过条件判断、跳转和循环等方法控制程序逻辑的走向
1、简言之就是:陈述算法思想,控制逻辑走向,完成有意义的动作(action).

2、C#语言的语句由分号(;)结尾,但由分号结尾的不一定都是语句 比如 :using System;这是引入名称空间的指令,不是语句。

程序执行的操作采用语句表达。 常见操作包括声明变量、赋值、调用方法、循环访问集合,以及根据给定条件分支到一个或另一个代码块。 语句在程序中的执行顺序称为“控制流”或“执行流”。 根据程序对运行时所收到的输入的响应,在程序每次运行时控制流可能有所不同。

语句可以是以分号(;)结尾的单行代码,也可以是语句块中的一系列单行语句。 语句块括在括号 {} 中,并且可以包含嵌套块。

声明语句 声明语句引入新的变量或常量。 变量声明可以选择为变量赋值。 在常量声明中必须赋值。
表达式语句 用于计算值的表达式语句必须在变量中存储该值。
选择语句 选择语句用于根据一个或多个指定条件分支到不同的代码段。 有关详细信息,请参阅下列主题:

迭代语句 迭代语句用于遍历集合(如数组),或重复执行同一组语句直到满足指定的条件。 有关详细信息,请参阅下列主题:

跳转语句 跳转语句将控制转移给另一代码段。 有关详细信息,请参阅下列主题:

异常处理语句 异常处理语句用于从运行时发生的异常情况正常恢复。 有关详细信息,请参阅下列主题:

Checked 和 unchecked Checked 和 unchecked 语句用于指定将结果存储在变量中、但该变量过小而不能容纳结果值时,是否允许数值运算导致溢出。 有关详细信息,请参阅 checkedunchecked
await 语句 如果用 async 修饰符标记方法,则可以使用该方法中的 await 运算符。 在控制到达异步方法的 await 表达式时,控制将返回到调用方,该方法中的进程将挂起,直到等待的任务完成为止。 任务完成后,可以在方法中恢复执行。

有关简单示例,请参阅方法的“异步方法”一节。 有关详细信息,请参阅 async 和 await 的异步编程
yield return 语句 迭代器对集合执行自定义迭代,如列表或数组。 迭代器使用 yield return 语句返回元素,每次返回一个。 到达 yield return 语句时,会记住当前在代码中的位置。 下次调用迭代器时,将从该位置重新开始执行。

有关更多信息,请参见 迭代器
fixed 语句 fixed 语句禁止垃圾回收器重定位可移动的变量。 有关详细信息,请参阅 fixed
lock 语句 lock 语句用于限制一次仅允许一个线程访问代码块。 有关详细信息,请参阅 lock
带标签的语句 可以为语句指定一个标签,然后使用 goto 关键字跳转到该带标签的语句。 (参见下一行中的示例。)
空语句 空语句只含一个分号。 不执行任何操作,可以在需要语句但不需要执行任何操作的地方使用。

C#  语句块(block)

4.3.2使用块来分组语句
有时,需要在一个布尔表达式为true的前提下运行两个或者更多的语句。可以将要运行的语句分组到一个新方法中,然后调用那个方法。但是,一个更简单的做法是将语句分组到一个块(block)中。块是指用一对大括号来封闭的一系列语句。在下例中,两个语句将seconds变量重置为零,并使minutes变量递增。我们用一个块来分组这两个语句。假如seconds 的值等于59,就执行该块:
int seconds =0;
int minutes =0;if 《seconds ==59)(
seconds =0:minuteB早+:
}else
seconds++;

C# 指令

1、using指令

using指令

用于导入命名空间。这是避免使用完全限定名称来指代某种类型的快捷方法。

using static指令

从C#6开始,我们不仅可以导入命名空间还可以使用using static指令导入特定的类型。这样就可以直接使用类型静态成员而不需要指定类型的名称了。在接下来的例子中,我们这样调用Console类的静态方法WriteLine:

using static指令将类型的可访问的静态成员,包括字段、属性以及嵌套类型(后续章节会讲解),全部导入进来。同时,该指令也支持导入枚举类型的成员

因此如果导入了以下的枚举类型:

using static System.Windows.Visibility;

我们就可以直接使用Hidden而不是Visibility.Hidden了:

var textBox = new TextBox { Visibility = Hidden }; 

C#编译器还没有聪明到可以基于上下文来推断出正确的类型,因此在导入多个静态类型导致二义性时会发生编译错误。

using语句

第一种using语句写法:这种写法默认sw的作用在第一层花括号之间。从 C# 8.0 开始,可以对不需要使用大括号的 using 语句使用以下替代语法:

if (!readme.Exists)
{
    using StreamWriter sw = readme.CreateText();

    sw.WriteLine("this is i write first line");
    sw.WriteLine("this is i write scond line");
    sw.WriteLine("this is i write third line");
}

ILspy反编译后

if (!readme.Exists)

        {

            StreamWriter sw = readme.CreateText();

            try

            {

                sw.WriteLine("this is i write first line");

                sw.WriteLine("this is i write scond line");

                sw.WriteLine("this is i write third line");

            }

            finally

            {

                if (sw != null)

                {

                    ((IDisposable)sw).Dispose();

                }

            }

        }

 第二种using语句写法,给using语句加一个额外的花括号{},花括号标识作用域

if (!readme.Exists)
{
    {    
  using StreamWriter sw = readme.CreateText();
 
    sw.WriteLine("this is i write first line");
    sw.WriteLine("this is i write scond line");
    sw.WriteLine("this is i write third line");
        }
    int i = 0;  
}

Il编译后的代码

if (!readme.Exists)

        {

            StreamWriter sw = readme.CreateText();

            try

            {

                sw.WriteLine("this is i write first line");

                sw.WriteLine("this is i write scond line");

                sw.WriteLine("this is i write third line");

            }

            finally

            {

                if (sw != null)

                {

                    ((IDisposable)sw).Dispose();

                }

            }

            int i = 0;

        }

第三种写法、这种事比较好方式,用完sw就释放 。using 语句中使用的对象必须实现 IDisposable 接口。

var reader = new StringReader(manyLines);
using (reader)
{
string? item;
do
{
item = reader.ReadLine();
Console.WriteLine(item);
} while (item != null);
}

第四种写法:C#8.0 之前的写法

using (var reader = new StringReader(manyLines))
{
string? item;
do
{
item = reader.ReadLine();
Console.WriteLine(item);
} while (item != null);
}

【C# 基础概念】表达式(expression)、语句(statement)、块(block),指令(using)的更多相关文章

  1. Java基础教程(8)--表达式、语句和块

    一.表达式   表达式由变量和运算符组成.下面是一个简单的赋值表达式: a = 0;   表达式都具有运算结果,因为赋值表达式的运算结果是左侧操作数的值,因此上面的表达式将会返回一个0.可以使用简单的 ...

  2. javascript语句——表达式语句、块语句、空语句和声明语句

    × 目录 [1]表达式 [2]块语句 [3]空语句[4]声明 前面的话 如果表达式在javascript中是短语,那么语句(statement)就是javascript整句或命令.表达式计算出一个值, ...

  3. Java代码三级跳——表达式、语句和代码块

    Java代码三级跳—表达式.语句和代码块 表达式(expression):Java中最基本的一个运算.比如一个加法运算表达式.1+2是一个表达式,a+b也是. 语句(statement):类似于平时说 ...

  4. 小猪猪C++笔记基础篇(五)表达式、语句

    小猪猪C++笔记基础篇(五) 关键词:表达式.语句 本章的内容比较简单,基本上没有什么理解上的困难,都是知识上的问题.先开始想要不要写呢,本来是不准备写的,但是既然读了书就要做笔记,还是写一写,毕竟还 ...

  5. JavaScript 中表达式和语句的区别

    1.语句和表达式 JavaScript中的表达式和语句是有区别的.一个表达式会产生一个值,它可以放在任何需要一个值的地方,比如,作为一个函数调用的参数.下面的每行代码都是一个表达式: myvar3 + ...

  6. C# - 表达式与语句

    表达式与语句(Expression&Statement) 操作数(Operands) 1.数字.2.字符.3.变量.4.类型.5.对象.6.方法 操作符(Operator) 参考:C# - 操 ...

  7. 函数响应式编程(FRP)—基础概念篇

    原文出处:http://ios.jobbole.com/86815/. 一函数响应式编程 说到函数响应式编程,就不得不提到函数式编程,他们俩有什么关系呢?今天我们就详细的解析一下他们的关系. 现在下面 ...

  8. C#表达式和语句

    表达式由操作数 (operand) 和运算符 (operator) 构成.表达式的运算符指示对操作数适用什么样的运算.运算符的示例包括+.-.*./ 和 new.操作数的示例包括文本.字段.局部变量和 ...

  9. JavaScript--我发现,原来你是这样的JS(基础概念--躯壳,不妨从中文角度看js)

    介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第二篇(基础概念--躯壳篇),有着部分第三章的知识内容,当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的, ...

随机推荐

  1. 不难懂-------git版本回退

    1. git log 定义:该命令显示从最近到最远的提交日志.每一次提交都有对应的 commit id 和 commit message.   如果嫌弃输出的信息杂乱无章,那么加上 --pretty= ...

  2. node.js request请求url错误:证书已过期 Error: certificate has expired

    场景: node:8.9.3版本 报错代码: Error: certificate has expired at TLSSocket.<anonymous> (_tls_wrap.js:1 ...

  3. Vue3.2中的setup语法糖,保证你看的明明白白!

    vue3.2 到底更新了什么? 根据原文内容的更新的内容主要有以下 5 块: 1.SSR:服务端渲染优化.@vue/server-renderer包加了一个ES模块创建, 与Node.js解耦,使在非 ...

  4. 学习JAVAWEB 第三十六天

    今天改了一天的bug 使用eclipse出现的问题:首先lib文件夹的名字是不可以更改的它放在WEB-INF文件夹下,放所有的jar包,使用时一定不要忘了将jar包添加至构建路径tomcat的部署问题 ...

  5. .NET 20周年软件趋势随想

    从2000年微软启动.NET战略时,我还是一位大学生,当年著名的黑客Miguel de Icaza , Miguel 为了寻找GNOME项目开发框架经过充分的调研启动了一个志存高远的项目:Mono,一 ...

  6. 使用JMX Exporter监控Rainbond上的Java应用

    场景 Prometheus 社区开发了 JMX Exporter 用于导出 JVM 的监控指标,以便使用 Prometheus 来采集监控数据.当您的 Java 应用部署在Rainbond上后 可通过 ...

  7. JDK8 的 Lambda、Stream、LocalDate

    前言 本篇主要讲述是Java中JDK1.8的一些新语法特性使用,主要是Lambda.Stream和LocalDate日期的一些使用讲解. 作者:虚无境 来源:cnblogs.com/xuwujing/ ...

  8. Category基本概念

    1.什么是Category Category有很多种翻译: 分类 \ 类别 \ 类目 (一般叫分类) Category是OC特有的语法, 其他语言没有的语法 Category的作用 可以在不修改原来类 ...

  9. 测试前期API未实现时,如何写测试方法

    大家在做接口测试的时候可能经历过这种情况,开发出来接口文档后,测试人员就要开始编写接口测试的自动化代码.这时就会用到了mock server,mock server不在这里说了,百度一大堆,想怎么实现 ...

  10. IOS scrollView 图片浏览

    // // ViewController.m // 0426 // // Created by apple on 15/4/26. // Copyright (c) 2015年 gense. All ...