2019-8-31-C#-条件编译
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
C# 条件编译
|
lindexi
|
2019-08-31 16:55:58 +0800
|
2019-07-18 15:27:12 +0800
|
C#
|
有一部分代码只是用来调试使用,不期望在发布的时候执行。也有一些代码只是用来测试性能,也不期望在其他时候使用。在做源代码包的时候,我需要对不同的平台使用不同的代码。此时就可以用到条件编译符,在不同的条件下编译不同的代码
和 C++ 差不多,在 C# 里面也有宏的概念,只是在 C# 里面的专业名词是条件编译符
通过 #if #else 这些预处理器指令,可以指定使用不同的代码参加编译
用法是在 #if 后面跟上条件判断逻辑,只要条件判断逻辑返回 true 那么在 #if 包含的范围内的代码将会参加编译
在 #if 包含的范围内指的是在 #if 和下一个 #else 或 #elif 或 #endif 指令之间的范围,和普通的条件判断逻辑相同
#if NET45 // 添加代码
// 如果定义了 NET45 这个宏,那么在这个范围内的代码将会参加编译 #elif NET46 // 如果没有定义 NET45 这个宏,那么将会进入这个分支的判断,如果定义了 NET46 这个宏那么在这个范围内的代码将会参加编译 #else // 在上面的判断都不成立的时候,在这个范围内的代码将会参加编译 #endif
上面是使用最长的判断代码,而更多的只是其中的组合,如 #if xx 和 #endif 的代码
例如我指定了在 DEBUG 模式,也就是调试模式下执行和发布模式不同的输出
public void Foo()
{
#if DEBUG
Console.WriteLine("Debug version");
#endif
}
在有定义 DEBUG 宏的编译时候,也就是一般在调试的时候,将会编译下面代码
public void Foo()
{
Console.WriteLine("Debug version");
}
而在没有定义 DEBUG 条件编译符的时候,将会编译下面的代码
public void Foo()
{ }
可以注意到 Console.WriteLine("Debug version"); 没有在没有定义 DEBUG 的时候参加编译,这段代码将被忽略
这样就是预处理器指令命名的原因,表示在编译之前做的指令
在进行判断是否进行编译的时候,支持使用复杂的条件判断,包括使用运算符 ==(相等)和 !=(不相等)判断逻辑,在使用运算符的左边是对应的宏,右边是 true 和 false 两个值,其中 true 表示存在这个宏的定义,如下代码
#if DEBUG == true
#endif
上面代码的 #if DEBUG == true 和 #if DEBUG 是等价写法
另外还支持运算符 && (and) || (or) 和 ! (not) 连接多个判断
此时的 #if DEBUG == false 和 #if !DEBUG 是等价判断
在使用连接符号的时候,支持添加 == 等判断运行符,也支持直接写条件编译符,如下代码
#if NET45 || DEBUG == true
// 在 NET45 定义或 DEBUG 定义的时候,这个范围内的代码可以执行
#endif
多个条件同时判断可以使用括号包含判断,请看代码
#if NET46 || (DEBUG == true && NET47)
#endif
在定义了 NET46 或同时定义了 DEBUG 和 NET47 编译范围代码
更多预定义宏请看dotnet 新项目格式与对应框架预定义的宏
2019-8-31-C#-条件编译的更多相关文章
- agentzh 的 Nginx 教程(版本 2019.07.31)
agentzh 的 Nginx 教程(版本 2019.07.31) agentzh 的 Nginx 教程(版本 2019.07.31) https://openresty.org/download/a ...
- ARTS Challenge- Week 1 (2019.03.25~2019.03.31)
1.Algorithm - at least one leetcode problem per week(Medium+) 986. Interval List Intersections https ...
- 2020届京东秋招正式批一面记录-Java开发-2019.08.31
京东一面总结 总共时间持续时间约40分钟 1.你用过集合类里面哪些是线程安全的,哪些是线程不安全的?分别举两个例子? 线程安全:HashTable以及ConcurrentHashMap 非线程安全:A ...
- 牛客CSP-S提高组赛前集训营2 ———— 2019.10.31
比赛链接 期望得分:100+20+20 实际得分:40+20+30 awa cccc T1 :基于贪心的思路,然后开始爆搜(雾 那必然是会死的,好吧他就是死了 #include<iostrea ...
- Beta冲刺(9/7)——2019.5.31
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Beta冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 队 ...
- lyc——2019.10.31
10:判决素数个数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入两个整数X和Y,输出两者之间的素数个数(包括X和Y). 输入 两个整数X和Y(1 <= X,Y <= ...
- Office 2019 2016 安装破解教程
声明:工具由蓝点网提供支持,密钥为本人收集内容,非转载部分 GVLKs for Office 2019 Product GVLK Office Professional Plus 2019 ...
- 工具软件集合 Adobe AE PS Pr CC 2018 2019 破解教程
来源https://mp.weixin.qq.com/s/zeq1sTmaPsKt7Bsok0Ldrg(若链接失效,请关注软件安装管家公众号) 相关链接 Office 2019破解教程 Adobe 2 ...
- NOI2019退役记 upd:2019.12.1
(我把原来写的东西全部删掉了) AFO. 我退役了,\(\mbox{yyb}\)退役了. 至少,在接下来的日子里,我得投身到文化课,度过快乐的高三生活了. 这两年的\(OI\)生涯给了我很多,让我学会 ...
- windows批处理语法
写批处理文件,除了了解基本语法外,你还需要熟悉常用的windows命令,那就先看看这篇文章:windows常用命令 #重要说明 文件及目录路径:要使用反斜杠'\',不要使用正斜杠'/' 如:del d ...
随机推荐
- Task3.PyTorch实现Logistic regression
1.PyTorch基础实现代码 import torch from torch.autograd import Variable torch.manual_seed(2) x_data = Varia ...
- Centos7硬盘空间扩容(vmware虚拟机)
1. 查看系统挂载点 df -h 2. 系统关机 init 0 硬盘1空间修改为100G,保存并启动 3.查看磁盘 fdisk -l /dev/sda空间加上去了 3. 硬盘分区 fdisk /dev ...
- Eclipse使用maven创建SSM-web项目
1.环境准备 (1)maven:apache-maven-3.5.2,我的maven安装在D:\apache-maven-3.5.2,eclipse中maven配置如下: 先add ,添加好自己的ma ...
- 基于ES6的tinyJquery
原文地址:Bougie的博客 jQuery作为曾经Web前端的必备利器,随着MVVM框架的兴起,如今已稍显没落.但它操作DOM的便利性无出其右.我用ES6写了一个基于class简化版的jQuery,包 ...
- scau 1142 巡逻的士兵(分治)
1142 巡逻的士兵 时间限制:1000MS 内存限制:65536K 提交次数:217 通过次数:58 题型: 编程题 语言: G++;GCC Description 有N个士兵站成一队列, 现 ...
- inline-block的间隙问题 box-orient属性 line-clamp属性 margin问题
只要设了 display:inline-block 将元素变成行级块元素的时候,会自带空隙,即使你设了 margin 和 padding 依然没有效果! 解决办法:只要在父元素上加上font-size ...
- scrapy xpath xpath('---').xpath('string(.)') 提取子元素全部文本
product.xpath("div//div[@class='a-row a-spacing-mini'][1]/div[2]").xpath('string(.)')
- 学院-成就学院:Academy of Achievement
ylbtech-学院-成就学院:Academy of Achievement 1.返回顶部 1. https://www.achievement.org/ 2. https://www.achieve ...
- ajax跨域处理 No 'Access-Control-Allow-Origin' header is present on the requested resource 问题
Controller层的类上增加@CrossOrign注解,当前文件的所有接口就都可以被调用 spring注解@CrossOrigin不起作用的原因 1.是springMVC的版本要在4.2或以上版本 ...
- 002-JS-SDK开发使用,网页获取授权,扫一扫调用
一.概述 在申请响应的公众号之后,实名认证或者企业认证之后,可以进行对应开发 二.开发步骤 2.1.开发前提[服务号]-域名设置 登录后台之后→左侧设置→公众号设置→功能设置,设置好“JS接口安全域名 ...