2008-11-24 12 views
6

Gibt es ein analoges nicht vorhandenes Attribut oder eine Möglichkeit, das Conditional-Attribut nur für eine Methode zu verwenden, wenn dieses Symbol nicht definiert ist?Gibt es eine Umkehrung von System.Diagnostics.ConditionalAttribute?

Was ich suche ist etwas, das funktioniert wie folgt:

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

Derart, dass die Methode nicht, wenn das Symbol vorhanden SILVERLIGHT nicht enthalten sein.

Der Grund, warum ich nicht eine einfache #ifdef verwenden möchte, ist, damit ich den Vorteil des Compilers nutzen kann, um die aufrufenden Anweisungen zu entfernen, ohne jeden einzelnen Anruf in einem #ifdef umbrechen zu müssen.

+0

Als ich diese Frage schrieb, fiel mir ein, dass, wenn es existiert, es tatsächlich nicht hilfreich wäre für das, was ich versuchte zu tun. Aber es scheint sowieso eine gute Frage zu sein. – MojoFilter

Antwort

8

Update: Das folgende Code-Snippet funktioniert nur, wenn das #if in jeder aufrufenden Datei ist, die nicht sehr praktisch ist.

#if !SILVERLIGHT 
#define NOT_SILVERLIGHT 
#endif 

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

Was jedoch getan werden könnte, ist eine Build-Konfiguration zu haben, was auch immer Plattform Sie diesen Willen verwenden/definiert das benötigte Symbol (NOT_SILVERLIGHT in diesem Fall).

+0

Das funktioniert nur in der Datei, in der Sie die Methode deklarieren. Es ist keine globale Lösung – JaredPar

+0

Das ist eine ziemlich gute Idee, obwohl. Das ist mir sicher nicht eingefallen. – MojoFilter

+0

@Jared: Ich stehe korrigiert. Ich war der einzige Ort, an dem das Define sein musste, war mit der Deklaration der Funktion und die Aufrufe würden optimiert werden. Normalerweise verwende ich nur ConditionalAttribute mit/define. – Coincoin

Verwandte Themen