运算符
运算符
一:运算符:
首先我们先来给出c#中的算数运算符:
关系运算符:
逻辑运算符:
赋值运算符:
增量和减量可以作用于整个的表达式,也可以作用于表达式的内部。当x++和++x单独占一行的时候,他们的作用是相同的。对应于x=x+1.但是当他们用于较长的表达式的内部的时候,把运算符放在前面(++x)会在计算表达式之前递增x,换言之,递增了x之后,在表达式中使用新值进行计算。而把运算符放在后面(x++)会在计算表达式之后递增——使用x的原始值计算表达式,下面我们举例子说明问题:
static void Main(string[] args) { int x = 5; //因为在计算表达式之前 x从5递增到6,所以返回true将会被执行 if (++x == 6) { Console.WriteLine("这将执行"); } //当运算完成之后才会递增所以不会被执行 if (x++ == 7) { Console.WriteLine("这不会"); } Console.ReadKey(); }
1.1:条件运算符(三元运算符):
条件运算符也称之为三元运算符,是if——else结构的简化的形式。其名称的出处是它带有3个操作数。它首先判断一个条件,如果条件是真的。就返回一个值,如果条件是假的,则返回另一个值。其语法是:
Condition?true_value:false_value
如果condition是要判断的布尔表达式,true_value是Condition为true的时候返回的值,false_value是Condition要返回的值。
恰当的使用三元运算符,可以使用我们的程序非常的简洁。它特别使用与被调用的函数提供两个参数中的一个。使用它可以把布尔值转换为字符串值true或者false,它很适用于显示正确的单数形式或者复数形式。
//计算两个数字的大小 求出最大的 Console.WriteLine("请输入第一个数字"); int n1 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入第二个数字"); int n2 = Convert.ToInt32(Console.ReadLine()); // 语法: //表达式1?表达式2 :表达式3 int max = n1 > n2 ? n1 : n2; Console.WriteLine(max); Console.ReadKey();
表达式1一般为一个关系表达式。如果表达式1的值为true,那么表达式2的值就是整个三元表达式的值。如果表达式1的值为false,那么表达式3的值就是整个三元表达式的值。
注意:表达式2的结果类型必须跟表达式3的结果类型一致,并且也要跟整个三元表达式的结果类型一致。
Console.WriteLine("请输入姓名"); string name = Console.ReadLine(); string result = name == "张三" ? "淫才呀" : "流氓呀"; Console.WriteLine(result); Console.ReadKey();
1.2: is 运算符:
is运算符可以检查是否与特定的类型兼容。“兼容”表示对象或者是该类型。或者派生自该类型。例如,要检查变量是否与object类型兼容。可以使用下面的代码:
int i = 10; if (i is object) { Console.WriteLine("i is an object"); }
1.3: as 运算符:
as运算符用于执行引用类型的显示类型转换。如果要转换的的类型与指定的类型想兼容的话,转换就会成功的进行。如果类型不兼容的话,as运算符就会返回为null。
object o1 = "Some String"; object o2 = 5; string s1 = o1 as string; string s2 = o2 as string; Console.WriteLine(s1); //Some String Console.WriteLine(s2); //null Console.ReadKey();
1.4: typeof运算符:
typeof运算符返回一个表示特定类型的System.Type对象。例如:typeof(string)返回表示System.String类型的Type对象。在使用反射技术动态的查找对象的相关的信息时,这个运算符很有用。
1.5: 运算符的优先级:
1.6: 装箱和拆箱:
c#数据类型可以分为栈上分配内存的值类型和在托管堆上分配内存的引用类型。装箱和拆箱可以把值类型转换为引用类型,并把引用类型转换为值类型。我们把值类型强制转换为object类型。装箱用于描述把一个值类型转换为引用类型。运行库会为堆上的对象创建一个临时的引用类型的“箱子”。
该转换可以隐式的进行。还可以显示的进行转换:
int myIntNumber = 20; object myObject = myIntNumber;
拆箱用于描述相反的过程。其中以前的值类型强制转换为值类型。这里使用的术语“强制转换”,是因为这种转换时显示进行的。
int myIntNumber = 20; object myObject = myIntNumber; int mySecondNumber = (int)myObject;
只能对之前的装箱的变量进行拆箱。当myObject不是装箱之后的int类型的时候,如果执行最后的一行代码的时候,会抛出异常的信息。
注意:在拆箱的时候,必须非常的小心。确保得到的值变量有足够的空间存储拆箱的值中的所有字节。例如,c#的int只有32位。所以把long值(64位)拆箱为int时,会导致一个异常。