【问题标题】:What does ConditionalAttribute on an Attribute do?属性上的 ConditionalAttribute 有什么作用?
【发布时间】:2026-01-16 07:40:01
【问题描述】:

我知道ConditionalAttribute 做了什么。

文档说它也可以应用于一个类,如果它是从 Attribute 派生的:

[Conditional("DEBUG")]
public class FooAttribute : Attribute { }

但是那个自定义属性的行为如何?(它是从发布版本中剥离出来的吗?)

【问题讨论】:

标签: c# attributes custom-attributes release-builds debug-build


【解决方案1】:

@RicardoPontual 的评论给了我一个想法。

我这样做了:

[Conditional("DEBUG")]
public class FooAttribute : Attribute { }

[Foo]
public class Bar { }

我在调试模式编译,并在ILSpy(它是一个反汇编程序)中加载了DLL。正如预期的那样,这是我发现的:

[Foo]
public class Bar { }

然后我以发布模式编译,并在ILSpy中加载该DLL。这是我发现的:

public class Bar { }

Bar 类这次没有装饰!

所以,答案是,当你用Conditional 装饰一些自定义属性时,该属性本身也会以同样的方式成为有条件的。

这就是我想要的行为。我最初以为源自ConditionalAttribute,但它是密封的。相反,您需要装饰您的自定义属性。

【讨论】:

  • 很好,测试回答了这个问题。我可以想象一些有用的东西,比如在运行时根据程序集是编译调试还是发布来实现逻辑,只需检查自定义属性的存在:if (typeof(MyType).IsDefined(typeof(MyCustomAttribute), false))
最近更新 更多