visual studio - C# if directive

本文关键字:if directive studio visual | 更新日期: 2023-09-27 17:49:45

我可以写代码设置变量为真或假取决于我按下的按钮?参见下面的示例。

如果没有,还有什么方法可以达到类似的效果?我已经使用指令标记了不同模式的代码,只希望开发人员有切换模式的选项,但现在我希望给用户切换模式的选项。模式的选择将只在程序开始时给出,用户不允许切换模式。要切换模式,他只能重新启动程序。

如果不能使用指令,我可以使用什么最快的方法?(注意:语句都是围绕解决方案的)

我希望实现的伪码:

void button_click(...){
    if(!CONDITION)
        CONDITION = true;
    else
        CONDITION = false;
}

...
#if CONDITION
   //mode X with addtional steps
#endif

visual studio - C# if directive

你正在使用一个预处理器指令,并试图设置它从代码失败的目的,即使它是可能的(我很确定你不能)。为什么不使用常规布尔字段作为标志呢?

private bool Condition {get; set;}

这不可能。if语句在运行时执行,但是像#IF这样的预处理器指令在编译时执行。您需要在编译时决定如何构建代码,并且在项目的某个地方(例如在项目的属性中)或源文件的顶部,将CONDITION设置为针对给定构建所需的任何值。

如果这真的需要在运行时决定,那么您需要包括所有可能的代码路径,并在运行时决定采取哪一个。

如果您问是否可以根据代码中的条件进行条件编译,那么答案是否定的。编译器必须在编译时知道要在程序集中包含什么。没有条件编译,你几乎可以实现你想要实现的目标但是你想要做什么呢?

'#IF'指令用于条件编译,这意味着它查找在编译时定义的令牌,并逐字编译或不编译特定的代码。这意味着未编译的代码不是程序的一部分,不能在运行时使用。如果希望在运行时更改行为,则需要修改代码以使用正常标志,而不是条件编译。也就是说,您可能需要考虑更深入的设计审查,因为基于配置标志添加新的分支功能可能会很快导致代码混乱。

这些指令提供有条件地跳过源文件的部分,报告错误和警告条件,以及描述源代码的不同区域的能力

#IF指令是一个预处理器选项,一旦你编译代码就没有意义了,所以你不能在编译后使用这些来控制程序流程。

至于你的其他选项,你应该能够很容易地将它们转换为类级变量,但是,在消极的一面,你的代码将被if CONDITION ... else ...语句所充斥,可能最终成为管理的痛苦。

另一个对oop更友好的选项是实现State模式。您可以将每个"条件"的行为封装到它自己的状态中,并在模式中在它们之间进行切换。这对两个州来说可能是过度的(很可能是)。

另一个参考:http://www.dofactory.com/Patterns/PatternState.aspx

#IF是在编译时确定的,您希望在运行时更改它。这是不可能的。