是否可以从#IF DEBUG
条件内部为类变量赋值?
如果我在DEBUG
模式下运行,我想从主表单加载中有条件地执行一些代码。我以为我可以这样做:
Public Class Form1
public DEB as Integer
#if DEBUG then
DEB = 1
#else
DEB = 0
#end if
Private Sub Form1_Load(....)
if DEB=1 Then
<do something>
else
<do something else>
end if
....
但是,似乎无法为变量赋值。我显然不能正确理解范围。我似乎无法将#if DEBUG
置于Load子例程中。我该怎么做?
答案 0 :(得分:34)
为什么不直接测试编译常量?通过测试实际变量,你没有获得任何东西。
Public Class Form1
Private Sub Form1_Load(....)
#if DEBUG then
<do something>
#else
<do something else>
#end if
End Sub
End Class
答案 1 :(得分:0)
我在这里看不到您的问题。我这样做,并且效果很好。令人讨厌的是编译常数不能直接用于正在运行的代码,但是在您考虑它时才有意义。
响应克里斯蒂安,我认为反对将代码封装在编译器指令中的情况是,使用代码变量,您可以编写更干净,更具描述性的代码,而重复的次数可能更少,从而维护也更简单。
例如,这是我的标准库代码:
Public Module Common
#if DEBUG then
Public In_Debug As Boolean = True
#else
Public In_Debug As Boolean = False
#end if
End Module
Public Class Form1
Private Sub Form1_Load(....)
If In_Debug Then SplashScreen.Hide()
...
将In-Debug
代码变量有效地放置在公共模块中使其成为 Global ,您可以将其视为整个项目中的常量。
(示例说明:我没有在调试中显示初始屏幕,因为它可能会隐藏对话框等,可能会阻止您继续前进。)
很显然,您可以使用TRACE常量或选择声明的任何自定义编译器常量来做相同的事情。
是的,正如GregH所述,您需要确保在项目的 Debug 配置中确实声明了一个DEBUG常量(无论它是否实际称为“ Debug”)。您无需在 Release 中声明它;它的缺席被解释为“假”。