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

  当表达式包含多个运算符时,运算符的优先级 (precedence) 控制各运算符的计算顺序。例如,表达式 x + y * z 按 x + (y * z) 计算,因为 * 运算符的优先级高于 + 运算符。

  大多数运算符都可以重载 (overload)。运算符重载允许指定用户定义的运算符实现来执行运算,这些运算的操作数中至少有一个,甚至所有操作数都属于用户定义的类类型或结构类型。

下表总结了 C# 运算符,并按优先级从高到低的顺序列出各运算符类别。同一类别中的运算符优先级相同。

类别

表达式

说明

基本

x.m

成员访问

x(...)

方法和委托调用

x[...]

数组和索引器访问

x++

后增量

x--

后减量

new T(...)

对象和委托创建

new T(...){...}

使用初始值设定项创建对象

new {...}

匿名对象初始值设定项

new T[...]

数组创建

typeof(T)

获取 T 的 System.Type 对象

checked(x)

在 checked 上下文中计算表达式

unchecked(x)

在 unchecked 上下文中计算表达式

default(T)

获取类型 T 的默认值

delegate {...}

匿名函数(匿名方法)

一元

+x

恒等

-x

求相反数

!x

逻辑求反

~x

按位求反

++x

前增量

--x

前减量

(T)x

将 x 显式转换为类型 T

await x

异步等待 x 完成

乘法

x * y

乘法

x / y

除法

x % y

求余

加减

x + y

加法、字符串串联、委托组合

x – y

减法、委托移除

移位

x << y

左移

x >> y

右移

关系和类型检测

x < y

小于

x > y

大于

x <= y

小于或等于

x >= y

大于或等于

x is T

如果 x 为 T,则返回 true,否则返回 false

x as T

返回转换为类型 T 的 x,如果 x 不是 T 则返回 null

相等

x == y

等于

x != y

不等于

逻辑“与”

x & y

整型按位 AND,布尔逻辑 AND

逻辑 XOR

x ^ y

整型按位 XOR,布尔逻辑 XOR

逻辑 OR

x | y

整型按位 OR,布尔逻辑 OR

条件 AND

x && y

仅当 x 为 true 时,才对 y 求值

条件 OR

x || y

仅当 x 为 false 时,才对 y 求值

null 合并

X ?? y

如果 x 为 null,则计算结果为 y,否则计算结果为 x

条件

x ? y : z

如果 x 为 true,则对 y 求值;如果 x 为 false,则对 z 求值

赋值或匿名函数

x = y

赋值

x op= y

复合赋值;支持的运算符有:

*=   /=   %=   +=   -=   <<=   >>=   &=   ^=   |=

(T x) => y

匿名函数(lambda 表达式)

  语句

  程序的操作是使用语句 (statement) 来表示的。C# 支持几种不同的语句,其中许多以嵌入语句的形式定义。

  block 用于在只允许使用单个语句的上下文中编写多条语句。块由位于一对大括号 { 和 } 之间的语句列表组成。

  声明语句 (declaration statement) 用于声明局部变量和常量。

  表达式语句 (expression statement) 用于对表达式求值。可用作语句的表达式包括方法调用、使用 new 运算符的对象分配、使用 = 和复合赋值运算符的赋值、使用 ++ 和 -- 运算符的增量和减量运算以及 await 表达式。

  选择语句 (selection statement) 用于根据表达式的值从若干个给定的语句中选择一个来执行。这一组中有 if 和 switch 语句。

  迭代语句 (iteration statement) 用于重复执行嵌入语句。这一组中有 while、do、for 和 foreach 语句。

  跳转语句 (jump statement) 用于转移控制。这一组中有 break、continue、goto、throw、return 和 yield 语句。

  try...catch 语句用于捕获在块的执行期间发生的异常,try...finally 语句用于指定终止代码,不管是否发生异常,该代码都始终要执行。

  checked 语句和 unchecked 语句用于控制整型算术运算和转换的溢出检查上下文。

  lock 语句用于获取某个给定对象的互斥锁,执行一个语句,然后释放该锁。

  using 语句用于获得一个资源,执行一个语句,然后释放该资源。

  下表列出了 C# 的各语句,并提供每个语句的示例。

语句

示例

局部变量声明

static void Main() {
    int a;
    int b = 2, c = 3;
    a = 1;
    Console.WriteLine(a + b + c);
}

局部常量声明

static void Main() {
    const float pi = 3.1415927f;
    const int r = 25;
    Console.WriteLine(pi * r * r);
}

表达式语句

static void Main() {
    int i;
    i = 123;                    // Expression statement
    Console.WriteLine(i);    // Expression statement
    i++;                        //
Expression statement
    Console.WriteLine(i);    // Expression statement
}

if语句

static void Main(string[] args) {
    if (args.Length == 0) {
       Console.WriteLine("No
arguments");
    }
    else {
       Console.WriteLine("One or
more arguments");
    }
}

switch语句

static void Main(string[] args) {
    int n = args.Length;
    switch (n) {
       case 0:
           Console.WriteLine("No
arguments");
           break;
       case 1:
           Console.WriteLine("One
argument");
           break;
       default:
           Console.WriteLine("{0}
arguments", n);
           break;
       }
    }
}

while语句

static void Main(string[] args) {
    int i = 0;
    while (i < args.Length) {
       Console.WriteLine(args[i]);
       i++;
    }
}

do语句

static void Main() {
    string s;
    do {
       s = Console.ReadLine();
       if (s != null)
Console.WriteLine(s);
    } while (s != null);
}

for语句

static void Main(string[] args) {
    for (int i = 0; i < args.Length;
i++) {
       Console.WriteLine(args[i]);
    }
}

foreach语句

static void Main(string[] args) {
    foreach (string s in args) {
       Console.WriteLine(s);
    }
}

break语句

static void Main() {
    while (true) {
       string s = Console.ReadLine();
       if (s == null) break;
       Console.WriteLine(s);
    }
}

continue语句

static void Main(string[] args) {
    for (int i = 0; i < args.Length;
i++) {
       if
(args[i].StartsWith("/")) continue;
       Console.WriteLine(args[i]);
    }
}

goto语句

static void Main(string[] args) {
    int i = 0;
    goto check;
    loop:
    Console.WriteLine(args[i++]);
    check:
    if (i < args.Length) goto loop;
}

return语句

static int Add(int a, int b) {
    return a + b;
}

static void Main() {
    Console.WriteLine(Add(1, 2));
    return;
}

yield语句

static IEnumerable<int> Range(int
from, int to) {
    for (int i = from; i < to; i++) {
       yield return i;
    }
    yield break;
}

static void Main() {
    foreach (int x in Range(-10,10)) {
       Console.WriteLine(x);
    }
}

throw 和
try
 语句

static double Divide(double x, double y) {
    if (y == 0) throw new
DivideByZeroException();
    return x / y;
}

static void Main(string[] args) {
    try {
       if (args.Length != 2) {
           throw new Exception("Two
numbers required");
       }
       double x = double.Parse(args[0]);
       double y = double.Parse(args[1]);
       Console.WriteLine(Divide(x, y));
    }
    catch (Exception e) {
       Console.WriteLine(e.Message);
    }
    finally {
       Console.WriteLine(“Good bye!”);
    }
}

checked 和
unchecked 语句

static void Main() {
    int i = int.MaxValue;
    checked {
       Console.WriteLine(i + 1);       // Exception
    }
    unchecked {
       Console.WriteLine(i + 1);       // Overflow
    }
}

lock语句

class Account
{
    decimal balance;

public
void Withdraw(decimal amount) {
       lock (this) {
           if (amount > balance) {
              throw new
Exception("Insufficient funds");
           }
           balance -= amount;
       }
    }
}

using语句

static void Main() {
    using (TextWriter w =
File.CreateText("test.txt")) {
       w.WriteLine("Line
one");
       w.WriteLine("Line
two");
       w.WriteLine("Line
three");
    }
}

C#表达式和语句的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(2):表达式、语句

    在上一篇文章中,老周厚着脸皮给大伙介绍了代码文档的基本结构,以及一些代码对象与CodeDom类型的对应关系. 在评论中老周看到有朋友提到了 Emit,那老周就顺便提一下.严格上说,Emit并不是针对代 ...

  2. C Primer Plus_第5章_运算符、表达式和语句_编程练习

    Practice 1. 输入分钟输出对应的小时和分钟. #include #define MIN_PER_H 60 int main(void) { int mins, hours, minutes; ...

  3. JavaScript学习笔记-表达式和语句

    表达式和语句 eval( ) 只有一个参数 参数非字符串时,直接返回这个参数: 参数为字符串时,它把字符串当成JavaScript代码进行编译,编译失败则抛出语法错误,编译成功则执行代码,并返回最后一 ...

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

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

  5. C--运算符,表达式和语句实例

    //第五章 运算符,表达式和语句 #include<stdio.h> //引入头文件 #include<math.h> #define ADJUST 7.64 //定义常量 # ...

  6. C# - 表达式与语句

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

  7. C语言之运算符、表达式和语句

    #include<stdio.h> #define ADJUST 7.31 int main(void) { const double SCALE = 0.333; double shoe ...

  8. js 表达式与语句

    引子:表达式和语句很基础,但是有时会犯错,比如: function(){}//报错 (function(){})//不报错 function f(x){ return x + 1 }()//报错 fu ...

  9. Javascript - 表达式与语句

    表达式与语句(Expression&Statement) 流程控制语句 1.嵌入式语句 嵌入式即这种语句可以无限嵌套N层.所有嵌入式语句只需要键入首个关键单词,在visual studio里按 ...

随机推荐

  1. iOS 8自定义动画转场上手指南

    原文:http://www.cocoachina.com/ios/20150126/11011.html iOS 5发布的时候,苹果针对应用程序界面的设计,提出了一种全新的,革命性的方法—Storyb ...

  2. IOS开发-OC学习-Foundation框架练习

    OC语言Foundation框架中字典.字符串.数组的应用: NSString *string = @"China|Usa|France"; NSArray *array = [s ...

  3. java class加载机制及对象生成机制

    java class加载机制及对象生成机制 当使用到某个类,但该类还未初始化,未加载到内存中时会经历类加载.链接.初始化三个步骤完成类的初始化.需要注意的是类的初始化和链接的顺序有可能是互换的. Cl ...

  4. Docker学习计划

    刚开始学习Docker的时候,找资料在网上看到最多的是Docker的好处.比如: 1.Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多 2.Docker 对系统资源的利用率很高, ...

  5. C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名

    转自:http://www.cnblogs.com/huangcong/archive/2011/07/20/1931107.html 在之前的文本模板(T4)初体验中我们已经知道了T4的用处,下面就 ...

  6. Java-io流入门到精通详细总结

    IO流:★★★★★,用于处理设备上数据. 流:可以理解数据的流动,就是一个数据流.IO流最终要以对象来体现,对象都存在IO包中. 流也进行分类: 1:输入流(读)和输出流(写). 2:因为处理的数据不 ...

  7. Java数据流的一般操作规律总结

    流的操作规律: 1,明确源和目的. 数据源:就是需要读取,可以使用两个体系:InputStream.Reader: 数据汇:就是需要写入,可以使用两个体系:OutputStream.Writer: 2 ...

  8. excel计算后列填充

    先鼠标选中一个要输出的地方,输入=,然后就可以输入计算的公示,然后按enter,然后鼠标放在这个框的右下角变成十字,然后双击,就填充整列了.

  9. Java多线程(学习篇)

    Java多线程:(学习篇) 1.什么是线程 2.线程状态 3.线程中断 4.线程交互 5.同步机制 6.锁机制 7.堵塞队列与堵塞栈 8.条件变量.原子量.线程池等 9.线性安全类和Callable与 ...

  10. 数据库基础-INDEX

    http://m.oschina.net/blog/10314 一.引言 对数据库索引的关注从未淡出我的们的讨论,那么数据库索引是什么样的?聚集索引与非聚集索引有什么不同?希望本文对各位同仁有一定的帮 ...