C#存在许多运算符:
1.条件运算符(?:)
也叫做三元运算符,是if…else结构的简化形式。其名称的出处是它带有3个操作数。首先判断一个条件,如果是true则返回一个值,为false返回另一个值。语法如下
condition ? true_value : false_value;
其中condition是要判断的布尔表达式,true_value是condition为true时返回的值,false_value是condition为false时返回的值。
2.checked和unchecked运算符
考虑下面的代码:
byte b=255;
b++;
Console.writeLine(b,ToString());
这会导致溢出,C#提供了checked和unchecked运算符。如果一个代码块标记为checked,CLR就会执行溢出检查,如果发生溢出,就抛出OverflowException异常。下面修改代码,使之包含checked运算符:
byte b=255;
checked
{
b++;
}
Console.writeLine(b,ToString());
运行这段代码,就会得到溢出的错误信息。如果改为unchecked就不会抛出异常。默认为unchecked。
3.is运算符
is运算符可以检查对象是否与特定的类型兼容。“兼容”表示对象或者改类型,或者派生类型。例如,要检查变量是否与object类型兼容,可以使用下面的代码;
int i=10;
if(i is object)
{
Console.WrileLine(" i is an object");
}
为true以为int和所有C#数据类型一样,从object继承而来。
4.as运算符
as运算符用于执行引用类型的显式类型转换。如果要转换的类型兼容,转换就会成功进行;如果类型不兼容,as运算符就会返回null值。如下面的代码。如果object引用实际上不引用string实例,把object引用转换为string就会返回null;
object o1="Some String";
object o2=5;
string s1=o1 as string;//s1="Some String"
string s2=o2 as string;//s2=null
as运算符允许在一步中进行安全的类型转换,不需要先使用is运算符测试类型,再执行转换。
5.sizeof运算符
使用sizeof运算符可以确定栈中值类型需要的长度(单位字节):
Console.WriteLine(sizeof(int));
如果对于复杂类型(和非基元类型)使用sizeof运算符,就需要把代码放在unsafe块中,如下所示:
unsafe
{
Console.WriteLine(sizeof(Customer));
}
6.typeof运算符
返回一个表示特定类型的System.Type对象。;例如,typeof(string)返回表示System。String类型的Type对象。在使用反射技术动态的查找对象的相关信息时,这个运算符很有用。
7.可空类型和运算符
待续
8.空合并运算符(??)
可以处理可空类型和引用类型时表示null可能的值。这个运算符放在两个操作数之间,第一个操作数必须是一个可空类型或引用类型;第二个操作数必须与第一个操作数的类型相同,或者可以隐含的转换为第一个操作数的类型。空合并运算符的计算如下:如果第一个操作数不是null,整个表达式就等于第一个操作数的值。
如果第一个操作数是null,整个表达式就等于第二个操作数的值。
例如
int? a=null;
int b;
b=a??10;//b=10
a=3;
b=a?10;//b=3