2008-11-24 8 views
6

क्या कोई समान सशर्त-मौजूद नहीं है या सशर्त विशेषता का उपयोग करने का एक तरीका केवल एक विधि शामिल करने के लिए है यदि वह प्रतीक परिभाषित नहीं है?क्या सिस्टम का एक उलटा है। डायग्नोस्टिक्स। कंडिशन एट्रिब्यूट?

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

इस तरह की है कि अगर प्रतीक SILVERLIGHT मौजूद है विधि शामिल नहीं किया जाएगा:

मैं क्या देख रहा हूँ कुछ है कि इस तरह से काम करता है।

कारण मैं एक साधारण #ifdef का उपयोग नहीं करना चाहता हूं, इसलिए मैं #ifdef में प्रत्येक व्यक्तिगत कॉल को लपेटने के बिना कॉलिंग स्टेटमेंट को हटाने वाले कंपाइलर का लाभ उठा सकता हूं।

+0

जैसा कि मैं इस सवाल को लिख रहा था, यह मेरे लिए हुआ कि यदि यह अस्तित्व में है, तो वास्तव में यह उपयोगी नहीं होगा कि मैं क्या करने की कोशिश कर रहा था। लेकिन, यह वैसे भी एक अच्छा सवाल की तरह लगता है। – MojoFilter

उत्तर

8

अद्यतन: निम्न कोड स्निपेट केवल तभी काम करता है जब #if प्रत्येक कॉलिंग फ़ाइल में है जो बहुत व्यावहारिक नहीं है।

#if !SILVERLIGHT 
#define NOT_SILVERLIGHT 
#endif 

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

लेकिन क्या किया जा सकता है, जो कुछ भी मंच आप उस इच्छा/(उस मामले में NOT_SILVERLIGHT) की जरूरत प्रतीक को परिभाषित का उपयोग कर रहे के लिए एक निर्माण विन्यास है।

+0

यह केवल उस फ़ाइल में काम करेगा जिसमें आप विधि घोषित करते हैं। यह वैश्विक समाधान नहीं है – JaredPar

+0

हालांकि, यह एक बहुत अच्छा विचार है। यह निश्चित रूप से मेरे लिए नहीं हुआ था। – MojoFilter

+0

@ जेरेड: मैं सही खड़ा हूं। हालांकि, समारोह की घोषणा के साथ परिभाषित करने की आवश्यकता केवल एकमात्र जगह थी और कॉल को अनुकूलित किया जाएगा। मैं आमतौर पर केवल सशर्त एट्रिब्यूट का उपयोग/परिभाषित करता हूं। – Coincoin