zoukankan      html  css  js  c++  java
  • c#运算符几点小结

    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?= 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;
    注意:如果第二个操作数不能隐含地转换为第一个操作数的类型,就生成一个编译错误。


    作者:Jeff Wong
    出处:http://jeffwongishandsome.cnblogs.com/
    本文版权归作者和博客园共有,欢迎围观转载。转载时请您务必在文章明显位置给出原文链接,谢谢您的合作。

  • 相关阅读:
    Firefly 3288又一次制作android和lubuntu双系统固件
    想做一个完美的健身训练计划,你须要知道什么?
    【LeetCode-面试算法经典-Java实现】【075-Sort Colors (颜色排序)】
    每天进步一点点——Ganglia的Python扩展模块开发
    Unity3D-rigidBody.velocity
    泛型初识
    HDOJ 5418 Victor and World 状压DP
    UIPopoverController具体解释
    怎样提升站点的性能?
    PHP操作MongoDB数据库具体样例介绍(增、删、改、查) (六)
  • 原文地址:https://www.cnblogs.com/jeffwongishandsome/p/1444067.html
Copyright © 2011-2022 走看看