我知道我可以通过有条件地包含如下代码来有条件地设置变量:
#if DEBUG
someVar = "foo";
#else
someVar = "bar";
#endif
我宁愿在运行时枚举或测试编译器常量。
例如,我想将编译时定义的所有符号放在窗口标题中,以便测试人员可以看到他们正在测试哪个构建。
我知道我可以通过有条件地包含如下代码来有条件地设置变量:
#if DEBUG
someVar = "foo";
#else
someVar = "bar";
#endif
我宁愿在运行时枚举或测试编译器常量。
例如,我想将编译时定义的所有符号放在窗口标题中,以便测试人员可以看到他们正在测试哪个构建。
在 C# 中,您可以对编译器常量做的唯一事情是用 定义和取消定义它们,并用, def
, ,来undef
查看它们是否存在这个if
else
elif
endif
private static List<string> compileConstants = new List<string>();
#if DEBUG
compileConstants.Add("DEBUG");
#endif
除此之外,我认为没有其他方法。编译器常量是在将信息传递给程序集时定义和使用的
我认为预处理器会在编译时删除未使用的代码。
但是您可以使用条件属性以更简洁的方式完成同样的事情:
[Conditional("DEBUG")]
public void DrawDebugTitle() {
Form1.Title = "Debug mode";
}
然后简单地正常调用该方法,如果定义了 DEBUG,那么它将更改表单的标题,如果未定义 DEBUG,则方法调用虽然仍然出现在您的代码中,但不会执行任何操作。
编译器常量不存储在已编译程序集中的任何位置。因此,无法在运行时访问它们。