最近了解了DebuggerDisplay属性,我发现它非常有用。然而,令我惊讶的一件事是它没有[ConditionalAttribute("DEBUG")]
附加属性。有什么方法可以强制这样做还是尝试一下是个坏主意?还是因为其他原因无关紧要?
4 回答
[ConditionalAttribute("DEBUG")] 仅用于优化方法调用。
如果您真的想从构建中删除这些,您可以使用 #ifdef 以便代码仅在发布模式下编译。
需要记住的一件事是,您仍然可以在发布模式下调试二进制文件,只要您拥有 pdb 文件,这无关紧要。发布模式只是更快地清除变量并应用一些编译器优化
由于我经常必须在没有该DEBUG
指令的发布配置构建中调试东西,我不希望删除调试器的这些提示。
但是,如果您在调试时以显示方式有一些专有或机密信息,您不想将其放入您的发布版本中,您可能需要考虑使用ConditionalAttribute
or#if/#elif/#endif
预处理器指令来控制发布到您的发布中的内容构建。
例如,您可以这样做:
#if DEBUG
[DebuggerDisplay...]
#endif
public class MyAwesomeClass
{
}
这将确保仅在给出 DEBUG 指令时才发出该属性。
我将分享一个我已经开始欣赏使用的模式partial
。
public partial class MyClass{
//class details here
}
然后在其他地方:
#if DEBUG
[DebuggerDisplay("DebuggerValue")]
public partial class MyClass{
//anything needed for debugging purporses
}
#endif
这提供了使用 DebuggerDisplay 或其他属性的能力,而不会弄乱基类。
我一直在使用一些文件,所有文件都包含在#if DEBUG
其中以保存这些 Debug-Partials。它有助于保持核心类更干净,我不必记住为每个属性启动/结束编译器指令。
我认为这不是一个好主意,因为很多时候,除了在调试器 IMO 中显示它之外,您附加属性的东西还有其他用途。