需要了解C#中#if的用法

rat*_*ahy 2 .net c#

我正在使用C#.需要了解#if的用法.代码详细信息是:

#if
    //logic code
#else
    //logic code
#endif
    //logic code
Run Code Online (Sandbox Code Playgroud)

我无法理解它在调试模式下的工作原理.等待快速反应.提前致谢.

Sho*_*ikh 9

"#if DEBUG"有效,因为Visual Studio根据当前Solution的配置(在发布模式或调试模式下)创建名为DEBUG的预处理器指令 - 解决方案配置可以选择启用/禁用DEBUG和TRACE常量并关联它们解决方案配置.

您可以在代码中的任何位置使用此指令,它有助于在构建时基于模式消除代码.这实际上是一种常见的情况,有时我们需要一个代码只能在调试模式下运行而不能在发布模式下运行.你可以在这里找到更多细节

http://dotnetfacts.blogspot.com/2009/05/determine-debug-mode-in-net.html

问候,

编辑:感谢Paul Alexander的澄清

  • 为了澄清,"DEBUG"常量实际上并不是通过选择Debug/Release配置自动定义的.您仍必须在项目的构建设置中定义它.默认情况下,在创建新项目时,会选择DEBUG选项.但是,如果未选中它,即使您选择了Debug构建配置,它仍将保持未选中状态.早期版本的Visual Studio根本没有定义它. (2认同)

Jah*_*ine 6

C#定义了几个预处理程序指令,这些指令会影响编译器解释程序源文件的方式.在将程序转换为目标代码之前,这些指令会影响它们出现的源文件的文本.术语预处理程序指令来自这样的事实:这些指令传统上由称为预处理器的单独编译阶段处理.今天的现代编译器技术不再需要单独的预处理阶段来处理指令,但名称已经停滞不前.

#define指令定义了一个称为符号的字符序列.符号的存在或不存在可以由#if或确定#elif,并用于控制编译.

#if和#endif指令允许您根据涉及一个或多个符号的表达式是否为true来有条件地编译一系列代码.如果已定义,则符号为true.否则就是假的.因此,如果符号已由#define 指令定义,则它将评估为true.#if的一般形式是

#if symbol-expression
statement sequence
#endif
Run Code Online (Sandbox Code Playgroud)

如果#if后面的表达式为true,#endif则编译它之间的代码.否则,跳过介入代码.该#endif指令标志着#if块的结束.符号表达式可以像符号名称一样简单.您还可以在一个符号表达式中使用这些操作符:!,==,!=,&&,和||.括号也是允许的.

C#3.0初学者指南Herbert Schildt(学习C#IMO的最佳书籍)