2

我知道我可以通过有条件地包含如下代码来有条件地设置变量:

#if DEBUG
   someVar = "foo";
#else
   someVar = "bar";
#endif

我宁愿在运行时枚举或测试编译器常量。

例如,我想将编译时定义的所有符号放在窗口标题中,以便测试人员可以看到他们正在测试哪个构建。

4

3 回答 3

3

我认为您不能动态枚举它们

在 C# 中,您可以对编译器常量做的唯一事情是用 定义和取消定义它们,并用, def, ,来undef查看它们是否存在这个ifelseelifendif

private static List<string> compileConstants = new List<string>();

#if DEBUG
  compileConstants.Add("DEBUG");
#endif

除此之外,我认为没有其他方法。编译器常量是在将信息传递给程序集时定义和使用的

于 2013-07-09T18:51:13.220 回答
3

我认为预处理器会在编译时删除未使用的代码。

但是您可以使用条件属性以更简洁的方式完成同样的事情:

[Conditional("DEBUG")]
public void DrawDebugTitle() {
   Form1.Title = "Debug mode";
}

然后简单地正常调用该方法,如果定义了 DEBUG,那么它将更改表单的标题,如果未定义 DEBUG,则方法调用虽然仍然出现在您的代码中,但不会执行任何操作。

于 2013-07-09T18:54:02.847 回答
1

编译器常量不存储在已编译程序集中的任何位置。因此,无法在运行时访问它们。

于 2013-07-09T19:10:37.567 回答