所以,我正在使用一些属性,然后我意识到,拥有一个属性是有帮助的,这个属性取决于我是否构建在调试或发布中。
事实证明,通过搜索谷歌或堆栈溢出,我找不到我想要的东西。有一个名为[Conditional]的属性,有一个[DebuggerDisplay],但我找不到一个将属性本身设置为条件的属性。
以下链接解释了[Conditional] vs #if Debug #if DEBUG vs. Conditional("DEBUG")
我正在寻找的只是最接近于属性形式。
#if DEBUG
[SomeAttribute(...)]
#endif
我意识到我可以做一个#define,然后使用正确的符号,这将阻止我进行#if调试,但我觉得应该有一个我不知道的属性标志。
答案 0 :(得分:4)
这取决于你想要达到的目标。
如果您是SomeAttribute
的作者,并且希望该属性的所有应用程序都是有条件的,那么您可以在类型声明本身上应用Conditional
属性:
[Conditional("DEBUG")]
[System.AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
public class SomeAttribute : Attribute
{
...
如果你没有SomeAttribute
的来源,或者你不希望它是全有或全无,那么预处理器语句就是内置的所有内容。
答案 1 :(得分:1)
如果要包含有条件编译的代码,则必须使用这些#if, #else, #elif #endif
编译器指令,没有它就没有绝对的方法。
你甚至可以在你的Attribute类上使用ConditionalAttribute
,但它会被编译到程序集中,但后来会被JIT
编译器优化。
这可以帮助您理解:How does the Conditional attribute work?和Omitting code: Any difference between Conditional Attribute and pre-processing directive?