【问题标题】:C# - Accessing preprocessor debug variables inside of [Conditional("DEBUG")] functionsC# - 在 [Conditional("DEBUG")] 函数中访问预处理器调试变量
【发布时间】:2021-01-16 19:27:27
【问题描述】:

例子:

#if DEBUG
    float testVar;
#endif

[Conditional("DEBUG")]
void TestFunc()
{
    testVar = 3;
}

如您所见,我正在尝试访问 DEBUG 预处理器 if 语句中的变量。但不幸的是,这会导致发布模式下的编译错误。有没有办法使这项工作在发布模式下不必用预处理器 if 语句包围 TestFunc() 的每个调用

【问题讨论】:

  • 为什么不用#if DEBUG包围赋值语句
  • 我觉得这里的一切都很酷。你得到什么样的编译错误?您确定存在有效的“DEBUG”解决方案配置吗?
  • @godot "你得到什么样的编译错误?"如果您仔细查看我写的文字:“但不幸的是,这会导致发布模式下的编译错误”,我提到错误是在发布模式下。我希望它在发布和调试模式下都能工作。
  • @KlausGütter 这是一种方法,但我想避免在我的代码中包含许多这些预处理器语句。在我给出的这个例子中它可以正常工作,但在更复杂的例子中,变量在许多不同的地方使用,它会变得非常混乱。

标签: c# function variables debugging preprocessor


【解决方案1】:

一种选择是使用在发布版本中没有支持字段的属性:

#if DEBUG
    float testVar { get; set; }
#else
    float testVar 
    {
        get { return 0.0F; }
        set { throw NotImpementedException(); }
    }
#endif

这使得访问testVar 在语法上是合法的,但不会消耗任何实例内存。

【讨论】:

  • 很好。我只是想在标记您的答案之前等待,因为我想看看其他人是否有任何其他(或更好)的解决方案。
猜你喜欢
  • 2010-11-08
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
相关资源
最近更新 更多