c#各种运算符


c#主要支持下面所示的运算符:

复制代码
算术运算符                         + - * / %
逻辑运算符                         & | ^ ~ && || !
字符串连接运算符                   +
增量和减量运算符                   ++ --
移位运算符                         << >>
比较运算符                         == != < > <= >=
赋值运算符                         = += -= *= /= %= |= ^= <<= >>=
成员访问运算符(用于对象和结构)   .
索引运算符(用于数组和索引器)     []
数据类型转换运算符                 ()
条件运算符(三元运算符)           ?:
委托连接和删除运算符               + -
对象创建运算符                     new
类型信息运算符                     sizeof(只用于不安全的代码)  is as typeof 
溢出异常控制运算符                 checked unchecked
间接寻址运算符                     * -> &(只用于不安全的代码) []
命名空间别名限定符                 ::
空接合运算符                       ??
复制代码

比较不常用却又很重要的运算符:
1、is运算符和as运算符
is运算符可以检查对象是否与特定的类型兼容。比如下例中要检查变量是否与object类型兼容:

int  i = 0 ;
if (i  is   object )
{
  Console.WriteLine(
" i is an object. " );
}

as运算符用于执行引用类型的显式类型转换。如果要转换的类型和指定的类型兼容,转换就会成功进行;如果类型不兼容,as运算符就会返回值null。举例如下:

object  obj1 = " a string " ;
object  obj2 = 5 ;
string  str1 =  obj1  as   string ; //  str1="a string";
string  str2 =  obj2  as   string ; // str2=null;

注:as运算符允许在一步中进行安全的类型转换,不需要先使用is运算符测试类型,再执行转换。
2、checked和unchecked运算符
有如下的代码:

byte  b = 255 ;
b
++ ;
Console.WriteLine(b.ToString());

byte数据类型只能包含0~255的数,所以b值的增量会溢出。CLR如何处理溢出?C#提供了checked和unchecked运算符。如果把一块代码段标志为checked,CLR就会执行溢出检查,如果发生异常,就抛出异常。

byte  b = 255 ;
checked
{
  b
++ // 抛出OverflowException
}
Console.WriteLine(b.ToString());

如果要禁止溢出检查,可以把代码标记为unchecked:

byte  b = 255 ;
unchecked
{
  b
++ ;
}
Console.WriteLine(b.ToString());

在上述代码中,不会抛出异常,但会丢失数据,因为byte数据类型不能包含256位,溢出的位会丢失,b变量得到的值是0.
注:unchecked是默认值。只有在需要把几个未检查的代码行放在一个明确标记为checked的大代码块中,才需要显式使用unchecked关键字。
3、sizeof运算符
学过c的都知道,sizeof可以用来确定堆栈中值类型需要的长度(单位是字节):

unsafe
{
  Console.WriteLine(
sizeof ( int )); // 结果为4,因为int有四个字节,32位  
}

4、可空类型和运算符
如果在程序中使用可空类型,就必须考虑null值在与各种运算符一起使用时的影响。通常可空类型与一元或二元运算符一起使用时,如果其中一个操作数或两个操作数都是null,其结果就是null。

int ? =   null ;
int ? =  a + 4 // b=null;
int ? =  a * 2 // c=null;

注意,在比较可空类型时,只有有一个操作数是null,比较的结果就是false。即不能认为因为一个条件是false,那么它的对立面就是true。

int ? a = null ;
int ? b = 10 ;
if (a >= b)  // 空值a显然不能和b比较
  Console.WriteLine( " a>=b " ); 
else
  Console.WriteLine(
" a<b " );

5、空接合运算符(??)
空接合运算符为处理可空类型和引用类型时表示Null值的可能性提供了一种快捷方式。这个运算符放在两个操作数之间,第一个操作数必须是一个可空类型或引用类型,第二个操作数必须与第一个操作数的类型不同,或者可以隐含地转换为第一个操作数的类型。空接合运算符的计算如下:如果第一个操作数不是null,则整个表达式就等于第一个操作数的值。但如果第一个操作数是null,则整个表达式就等于第二个操作数的值。例如:

int ? a = null ;
int  b;
b
= a ?? 10 //  b的值为10;
a = 15 ;
b
= a ?? 10 ; //   b的值为15;

注意:如果第二个操作数不能隐含地转换为第一个操作数的类型,就生成一个编译错误。 



http://shop107954774.taobao.com/shop/view_shop.htm?user_number_id=1919696027&ali_trackid=2:mm_55853088_6374241_21856932:1398386295_6k3_130039509&qq-pf-to=pcqq.group淘宝店子,Bizen淘宝旗舰店,专卖男女士皮具。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值