c#主要支持下面所示的运算符: Code 比较不常用却又很重要的运算符: 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 ? a = null ; int ? b = a + 4 ; // b=null; int ? c = 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; 注意:如果第二个操作数不能隐含地转换为第一个操作数的类型,就生成一个编译错误。
本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2009/05/02/1444067.html,如需转载请自行联系原作者