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

C# 有没有办法将属性标记为条件属性,c#,attributes,conditional-compilation,C#,Attributes,Conditional Compilation,所以,我使用了一些属性,然后我意识到拥有一个属性可能会对我有所帮助,该属性取决于我是在debug中构建还是在release中构建 结果是我无法通过搜索google或stack overflow找到我想要的东西。有一个名为[Conditional]的属性和一个[DebuggerDisplay],但我找不到一个将属性本身设置为Conditional的属性 下面的链接解释了[Conditional]与#if调试 我要找的是更接近属性形式的 #if DEBUG [SomeAttribute(.

所以,我使用了一些属性,然后我意识到拥有一个属性可能会对我有所帮助,该属性取决于我是在debug中构建还是在release中构建

结果是我无法通过搜索google或stack overflow找到我想要的东西。有一个名为[Conditional]的属性和一个[DebuggerDisplay],但我找不到一个将属性本身设置为Conditional的属性

下面的链接解释了[Conditional]与#if调试

我要找的是更接近属性形式的

#if DEBUG
    [SomeAttribute(...)]
#endif
我意识到我可以做一个#定义,然后使用正确的符号,这将使我不必#如果到处调试,但我觉得应该有一个我不知道的属性标志。

不,我不这么认为。 如果要包含有条件编译的代码,必须使用这些
#If、#else、#elif#endif
编译器指令,没有它就没有绝对的方法


您甚至可以在ur属性类上使用
ConditionalAttribute
,但它会被编译到程序集中,但稍后会被
JIT
编译器优化



这应该有助于你理解:这有点取决于你想要达到的目标

如果您是
SomeAttribute
的作者,并且希望该属性的所有应用程序都是有条件的,则可以对类型声明本身应用
conditional
属性:

[Conditional("DEBUG")]
[System.AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
public class SomeAttribute : Attribute
{
    ...

如果您没有
SomeAttribute
的源代码,或者您不希望它是all或nothing,那么预处理器语句就只剩下内置的部分了。

“但是它被编译到程序集中,但后来被JIT编译器优化了。”这意味着什么?@vcsjones-这是用于方法调用的,不是属性。当属性类型声明中有
条件
时,如果没有与
条件
属性匹配的条件编译符号,则该属性根本不会出现在结果元数据中。这就是我所想的。在本例中,这不是我的属性,因此我将不得不将其包装成一个预处理器。我没有考虑过整体上应用一个类,所以这仍然是非常有帮助的。