C# 基础系列--运算符和类型转换

 

 

  条件运算符 ?:  条件? 真的值: 假的值

 

  C# 提供checked 和ucchecked运算符 。如果把一个代码块标记为checked,CLR就会执行溢出检查,如果发生溢出,就抛出OverflowException异常。

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

  执行代码就会抛出OverflowException异常

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

  执行将打印 0。

 

     IS运算符,检查类型是否为指定类型。这个运算符非常实用,在很多时候我们要用object进行传值和泛型处理,这时候这个特别是实用。我们可以先对object进行判断是不是我们要的类型,如果是进行相应的处理,也可以当我们的操作进行手动抛出异常。这个对开发或者数据安全性处理很有效。我记得我之前面试的时候,就被问到一个问题:怎么测试一个对象的值是不是你要的值?我想你应该也想到比较对象的值。这个没有错,但是还是不够好,我们应该先判断是不是我们要的类型,如果不是直接 return FALSE 。是在比较值,这样不会保证不会出现运行时错误,也提高了性能。

  object o = "111";
            Console.WriteLine(o is string); //true
            object o2 = 111;
            Console.WriteLine(o2 is string); //false

  

     AS 运算符,执行引用类型的显形转换,如果不是指定类型,返回null。

   object o = "111";
            string s = o as string; //1111
            object o2 = 111;
            string s2 = o2 as string; //null

  

  空合并运算符(??)

  

int? a = null;
            int b;
            b = a ?? 10; //  b值为 10
            a = 3;
            b = a ?? 10; // b 值为 2

  


比较

  很多都知道Equals和 ==,不过对象比较还有一个静态比较类 System.Object.ReferenceEquals。

1。System.Object.ReferenceEquals MSDN中的参考 确定指定的 object实例是否是相同的实例。

2。Equals()方法在MSDN中的参考:

Equals 的默认实现仅支持引用相等,但派生类可重写此方法以支持值相等。

对于引用类型,相等定义为对象相等,即这些引用是否引用同一对象。对于值类型,相等定义为按位相等

3。

==运算符在MSDN中的解释:

对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。

 int inF = 1;
            bool a = System.Object.ReferenceEquals(inF, 1); 
            Console.WriteLine(a); // false
            Console.WriteLine(inF.Equals(1));//true
            Console.WriteLine(inF == 1);//true

  

 

 

 

 

posted @ 2012-08-15 13:03  望江南  阅读(546)  评论(0编辑  收藏  举报