2008-11-24 9 views
6

¿Existe un atributo condicional-no-presente análogo o quizás una forma de usar el atributo Condicional para incluir solo un método si ese símbolo es no definido?¿Hay un inverso de System.Diagnostics.ConditionalAttribute?

Lo que estoy buscando es algo que funciona de esta manera:

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

De tal manera que el método no se incluirá si el símbolo SILVERLIGHT existe.

La razón por la que no quiero usar un simple #ifdef es para poder aprovechar el hecho de que el compilador elimine los enunciados de llamada sin tener que ajustar cada llamada individual en un #ifdef.

+0

Mientras escribía esta pregunta, se me ocurrió que si existiera, en realidad no sería útil para lo que estaba tratando de hacer. Pero, parece una buena pregunta de todos modos. – MojoFilter

Respuesta

8

Actualización: El siguiente fragmento de código solo funciona si el #if está en cada archivo de llamada que no es muy práctico.

#if !SILVERLIGHT 
#define NOT_SILVERLIGHT 
#endif 

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

lo que podría hacerse, sin embargo, es tener una configuración de construcción para cualquier plataforma que está utilizando esa voluntad/definir el símbolo necesario (NOT_SILVERLIGHT en ese caso).

+0

Eso solo funcionará en el archivo en el que declare el método. No es una solución global – JaredPar

+0

Sin embargo, es una muy buena idea. Eso ciertamente no se me ocurrió. – MojoFilter

+0

@Jared: estoy corregido. Pensé que el único lugar donde debía estar definida era con la declaración de función y que las llamadas se optimizarían. Usualmente solo uso el Atributo Condicional con/define. – Coincoin