c# 什么时候有必要用到预处理?

时间:2022-11-22 16:02:14
1.#define

2.#if, #else, #elif, #endif

3.#undef

这些东西的用法网上介绍的很详细,也会用,但是什么时候有必要用它呢?我咋感觉没啥用呢

3 个解决方案

#1


你可以使用  

#if DEBUG
....
#else
....
#endif

来区别调试开发和发布的不同代码。因为调试是几乎不使用 try...catch 机制的,需要尽可能早地让vs 调试器捕获异常。而 Release 版本一定是在最外层处理掉抛出的异常、而不让应用崩溃的。

如果有同一个类库,需要分别为 Silverlight、WPF、Winform、ASP.NE等等使用,但是每一个环境都有一点点差别,需要使用不同的实现方法,这就需要条件编译。

如果你需要为不同目标编译不同代码,例如给不同团队稍有区别,或者你不同的调试级别下需要屏蔽不同的代码,等等,可以自定义条件编译变量(在工程的属性窗口设置)。

条件编译可以使得目标代码“很干净”,并不需要在代码中执行什么 if 判断代码。因为根本不编译进目标代码中。

#2


引用 1 楼 sp1234 的回复:
你可以使用  

#if DEBUG
....
#else
....
#endif

来区别调试开发和发布的不同代码。因为调试是几乎不使用 try...catch 机制的,需要尽可能早地让vs 调试器捕获异常。而 Release 版本一定是在最外层处理掉抛出的异常、而不让应用崩溃的。

如果有同一个类库,需要分别为 Silverlight、WPF、Winform、ASP.NE等等使用,但是每一个环境都有一点点差别,需要使用不同的实现方法,这就需要条件编译。

如果你需要为不同目标编译不同代码,例如给不同团队稍有区别,或者你不同的调试级别下需要屏蔽不同的代码,等等,可以自定义条件编译变量(在工程的属性窗口设置)。

条件编译可以使得目标代码“很干净”,并不需要在代码中执行什么 if 判断代码。因为根本不编译进目标代码中。


如果有同一个类库,需要分别为 Silverlight、WPF、Winform、ASP.NE等等使用,但是每一个环境都有一点点差别,需要使用不同的实现方法,这就需要条件编译。
预处理能自动判断是WPF还是winform,还是也得手动更改#define 内容?

#3


引用 2 楼 u013402605 的回复:
预处理能自动判断是WPF还是winform,还是也得手动更改#define 内容?


例如 SILVERLIGHT就是vs 自动设置的。你可以在“生成”属性窗口去设置条件编译符号。

源代码中通常不设置。源代码文件可能被引入不同工程(例如使用“添加现有文件->link”方式)。

#1


你可以使用  

#if DEBUG
....
#else
....
#endif

来区别调试开发和发布的不同代码。因为调试是几乎不使用 try...catch 机制的,需要尽可能早地让vs 调试器捕获异常。而 Release 版本一定是在最外层处理掉抛出的异常、而不让应用崩溃的。

如果有同一个类库,需要分别为 Silverlight、WPF、Winform、ASP.NE等等使用,但是每一个环境都有一点点差别,需要使用不同的实现方法,这就需要条件编译。

如果你需要为不同目标编译不同代码,例如给不同团队稍有区别,或者你不同的调试级别下需要屏蔽不同的代码,等等,可以自定义条件编译变量(在工程的属性窗口设置)。

条件编译可以使得目标代码“很干净”,并不需要在代码中执行什么 if 判断代码。因为根本不编译进目标代码中。

#2


引用 1 楼 sp1234 的回复:
你可以使用  

#if DEBUG
....
#else
....
#endif

来区别调试开发和发布的不同代码。因为调试是几乎不使用 try...catch 机制的,需要尽可能早地让vs 调试器捕获异常。而 Release 版本一定是在最外层处理掉抛出的异常、而不让应用崩溃的。

如果有同一个类库,需要分别为 Silverlight、WPF、Winform、ASP.NE等等使用,但是每一个环境都有一点点差别,需要使用不同的实现方法,这就需要条件编译。

如果你需要为不同目标编译不同代码,例如给不同团队稍有区别,或者你不同的调试级别下需要屏蔽不同的代码,等等,可以自定义条件编译变量(在工程的属性窗口设置)。

条件编译可以使得目标代码“很干净”,并不需要在代码中执行什么 if 判断代码。因为根本不编译进目标代码中。


如果有同一个类库,需要分别为 Silverlight、WPF、Winform、ASP.NE等等使用,但是每一个环境都有一点点差别,需要使用不同的实现方法,这就需要条件编译。
预处理能自动判断是WPF还是winform,还是也得手动更改#define 内容?

#3


引用 2 楼 u013402605 的回复:
预处理能自动判断是WPF还是winform,还是也得手动更改#define 内容?


例如 SILVERLIGHT就是vs 自动设置的。你可以在“生成”属性窗口去设置条件编译符号。

源代码中通常不设置。源代码文件可能被引入不同工程(例如使用“添加现有文件->link”方式)。