鼎鼎知识库
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

23.运算符与类型强制转换.md 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. > 条件运算符
  2. - 条件运算符(?:)也称为三元运算符,是if...else结构的简化形式。其名称的出处是它带有3个操作数。它首先判断一个条件,如果条件为真,就返回一个值;如果条件为假,则返回另一个值
  3. - 语法:condition?true_value:false_value
  4. - 其中condition是要判断的布尔表达式,true_value是condition为真时返回的值,false_value是condition为假时返回的值。
  5. - 恰当地使用三元运算符,可以使程序非常简洁。它特别适合于给调用的函数提供两个参数中的一个。使用它可以把布尔值快速转换为字符串值true或false。它也很适合于显示正确的单数形式或复数形式,例如:
  6. ```
  7. int x=1;
  8. string s=x+"";
  9. s+=(x==1?"man":"men");
  10. WriteLine(s);
  11. 如果x等于1,这段代码就显示1 man:如果x等于其他数,就显示其正确的复数形式
  12. ```
  13. > checked和unchecked运算符
  14. - 如果把一个代码块标记为checked,CLR就会执行溢出检查,如果发生溢出,就抛出OverflowException异常
  15. ```
  16. byte b=255;
  17. checked
  18. {
  19. b++;
  20. }
  21. WriteLine(b);
  22. 运行改代码,会得到错误信息:
  23. system.OverflowException:Arithmetic operation resultes in an overflow.
  24. ```
  25. - 用/checked 编译器选项进行编译,就可以检查程序中所有未标记代码的溢出。
  26. - 如果要禁止溢出检查,则可以把代码标记为unchecked:
  27. ```
  28. byte b=255;
  29. unchecked
  30. {
  31. b++;
  32. }
  33. WriteLine(b);
  34. ```
  35. > is运算符
  36. - is运算符可以检查对象是否与特定的类型兼容。短语“兼容”表示对象或者是该类型,或者派生自该类型。
  37. - 例如,要检查变量是否与object类型兼容,代码如下
  38. ```
  39. int i=10;
  40. if(i is object)
  41. {
  42. WriteLine("i is an object");
  43. }
  44. ```
  45. > as 运算符
  46. - as 运算符用于执行引用类型的显示类型转换。如果要转换的类型与指定的类型兼容,转换就会成功进行;如果类型不兼容,as运算符就会返回null值。
  47. - 下面的代码,如果object引用实际上不引用string实例,把object引用转换为string就会返回null:
  48. ```
  49. object o1="Some String";
  50. object o2=5;
  51. string s1=o1 as string;//s1="Some String"
  52. string s2=o2 as string;//s2=null
  53. ```
  54. - as 运算符允许在一步中进行安全的类型转换,不需要先试用is运算符测试类型,再执行转换。
  55. **sizeof运算符**
  56. - 使用sizeof运算符可以确定栈中值类型需要的长度
  57. **typeof运算符**
  58. - typeof运算符返回一个表示特定类型的System.Typed对象。在使用反射技术动态地查找对象的相关信息时,这个运算符很有用。
  59. **nameof运算符**
  60. - 该运算符接受一个符号、属性或方法,并返回其名称。
  61. **可空类型和运算符**
  62. - 值类型和引用类型的一个重要区别是,引用类型可以为空。值类型(如int)不能为空。