C#
三、操作符与控制流
3.1 操作符
3.1.1 递增递减操作符
- 简化了代码,但二者执行都不是原子级别的运算,可能出现线程不安全的问题
3.1.2 常量表达式和常量符号
- 常量表达式
- 在编译时能完成求值的表达式
- 编译生成CIL时用计算结果替代
- 常量符号
- const
- 修改常量的操作会导致编译错误
3.1.3 空接合操作符
- a??b
- 如果为空则返回另一个值,短路运算
3.1.4 null条件操作符
- a?.method().get()
- a为null则整个调用链不计算,返回null
- 如果不为null,则返回对应的可空类型
- 避免a?[3]一块使用
3.1.5 位操作符
- >>右移补1;
- 位运算符优先级低于算术运算符;
3.2 控制流
- goto
- 只能在switch语句中使用
3.3 预处理指令
- 预处理指令告诉编译器要编译哪些代码,并指出如何处理代码中的特定错误和警告,以及有关代码组织的信息
3.3.1 处理版本或平台差异
- #if 符号 … #endif
- 如果符号被定义过,则编译包裹的代码
- 否则不编译
- 定义符号的方式
- #define
- 编译命令窗口定义define
- 取消符号定义:#undef
3.3.2 调试
- #if DEBUG … #endif
- IDE默认将DEBUG符号用于调试编译,RELEASE符号用于发布版
3.3.3 生成和关闭警告消息
- #error、#warning
- 编译时会有相应的提示信息
- 作用
- 主动标记有问题的代码,提醒开发人员注意
- #pragma
- 关闭与还原警告消息
- #pragma warning disable 1030:取消1030警告
- #pragma warning restore 1030:恢复1030警告
- nowarn:1030
- 编译时通过命令的方式进行使用
- 编译器设置整个编译过程忽略1030警告
3.3.4 指定行号
- 改变编译器在报告错误或警告时显示的行号
- #line 12
- 重设行号为12
- #line default
- 恢复实际行号
3.3.5 可视编辑器提示
- #region … #endregion
- IDE编辑器代码折叠