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