有没有办法将属性标记为条件

时间:2015-10-29 18:53:24

标签: c# attributes conditional-compilation

所以,我正在使用一些属性,然后我意识到,拥有一个属性是有帮助的,这个属性取决于我是否构建在调试或发布中。

事实证明,通过搜索谷歌或堆栈溢出,我找不到我想要的东西。有一个名为[Conditional]的属性,有一个[DebuggerDisplay],但我找不到一个将属性本身设置为条件的属性。

以下链接解释了[Conditional] vs #if Debug #if DEBUG vs. Conditional("DEBUG")

我正在寻找的只是最接近于属性形式。

#if DEBUG
    [SomeAttribute(...)]
#endif

我意识到我可以做一个#define,然后使用正确的符号,这将阻止我进行#if调试,但我觉得应该有一个我不知道的属性标志。

2 个答案:

答案 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?