【问题标题】:Is there an inverse of System.Diagnostics.ConditionalAttribute?是否存在 System.Diagnostics.ConditionalAttribute 的逆?
【发布时间】:2010-09-23 20:36:42
【问题描述】:

是否有类似的条件不存在属性,或者是否有一种方法可以使用条件属性来仅包含一个方法,如果该符号定义?

我正在寻找的是像这样工作的东西:

[Conditional("!SILVERLIGHT")]
private void DoStuffThatSilverlightCant() {...}

如果符号SILVERLIGHT确实存在,则不会包含该方法。

我不想使用简单的#ifdef 的原因是,我可以利用编译器删除调用语句,而不必将每个单独的调用包装在#ifdef 中。

【问题讨论】:

  • 在我写这个问题时,我突然想到,如果它确实存在,它实际上对我想做的事情没有帮助。但是,无论如何,这似乎是一个好问题。

标签: c# visual-studio attributes symbols


【解决方案1】:

更新: 以下代码 sn-p 仅在每个调用文件中都有 #if 时才有效,这不是很实用。

#if !SILVERLIGHT
#define NOT_SILVERLIGHT
#endif

[Conditional("NOT_SILVERLIGHT")]
private void DoStuffThatSilverlightCant() {...}

然而,可以做的是为您使用的任何平台进行构建配置,该配置将/定义所需的符号(在这种情况下为 NOT_SILVERLIGHT)。

【讨论】:

  • 这仅在您声明该方法的文件中有效。这不是一个全球性的解决方案
  • 不过,这是个好主意。我当然没有想到。
  • @Jared:我的立场是正确的。我虽然唯一需要定义的地方是函数声明,并且调用将被优化。我通常只将 ConditionalAttribute 与 /define 一起使用。
猜你喜欢
  • 1970-01-01
  • 2014-01-28
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 2018-07-09
  • 2011-05-04
相关资源
最近更新 更多