2012-09-21 13 views
7

आमतौर C4061 के लिए समान है, अगर मैं सी # में enums के लिए स्विच का उपयोग करें, मैं ऐसा ही कुछ लिखने के लिए है इस स्विच के लिए चेतावनियां C4061 और C4062 सक्षम करें, उन्हें त्रुटियां बनाएं और संकलन-समय की जांच करें। सी # में मुझे इस चेक को रनटाइम पर ले जाना है ...वहाँ एक चेतावनी (त्रुटि), के लिए सी #

क्या कोई जानता है कि सी # में यह संकलन समय में कैसे चेक किया जा सकता है? हो सकता है कि एक चेतावनी है, डिफ़ॉल्ट रूप से अक्षम है, जिसे मैंने याद किया, या किसी अन्य तरीके से?

+2

की बात आती है कृपया सी ++ Cxyz-चेतावनी के साथ परिचित नहीं उन लोगों के लिए चेतावनी की व्याख्या कर रहे हैं –

+0

उन्हें एमएसडीएन में अच्छी तरह से समझाया गया है। कुछ शब्दों में, सी ++ कोड में यदि आप उन्हें सक्षम करते हैं, तो कुछ गणना के लिए "स्विच" का उपयोग करें, और कुछ गणना मूल्यों को अलग करना भूलें (अलग "केस" में) आपको प्राप्त होगा संकलन के दौरान एक चेतावनी – Alek86

उत्तर

5

नहीं, संकलन-समय की जांच नहीं है - यह स्विच/केस होना वैध है जो केवल कुछ नामों को नियंत्रित करता है। यह संभव होगा, लेकिन इसमें कुछ समस्याएं हैं।

सबसे पहले, यह "नाम" मूल्यों से कोई भी नहीं पूरी तरह से वैध (दुर्भाग्य से) एक enum मूल्य के लिए है:

enum Foo 
{ 
    Bar = 0, 
    Baz = 1 
} 
... 
Foo nastyValue = (Foo) 50; 

यह देखते हुए कि किसी भी मूल्य स्विच/मामले के भीतर संभव है, संकलक यह नहीं पता कि आप एक अनाम मूल्य को संभालने का प्रयास करने का मतलब नहीं था।

दूसरा, यह Flags enums के साथ अच्छी तरह से काम नहीं करेगा - संकलक वास्तव में नहीं जानता कि कौन से मान सुविधाजनक संयोजन होने के लिए हैं। यह अनुमान लगा सकता है, लेकिन यह थोड़ा सा मुश्किल होगा।

तीसरा, यह हमेशा आप जो चाहते हैं वह हमेशा नहीं होता - कभी-कभी आप वास्तव में केवल कुछ मामलों का जवाब देना चाहते हैं। मैं एक उचित नियमित आधार पर चेतावनियों को दबाना नहीं चाहता हूं।

आप इसे ऊपर की ओर देखने के लिए Enum.IsDefined का उपयोग कर सकते हैं, लेकिन यह अपेक्षाकृत अक्षम है।

मैं मानता हूँ कि यह सब एक दर्द का एक सा है - enums एक बुरा क्षेत्र का एक सा है, जब यह नेट :(

+2

धन्यवाद। लेकिन मैं असहमत हूं "नहीं, संकलन-समय की जांच नहीं हो सकती है।" सी ++ में आप भी एनम पर कोई मूल्य निर्धारित कर सकते हैं, लेकिन जांच करने का अवसर है कि आप प्रोसेसिंग कर रहे हैं सभी अपेक्षित मान – Alek86

+0

@ Alek86: ठीक है, इसके आसपास संपादित होगा। –

+0

शायद आप जानते हैं कुछ तृतीय पक्ष उपकरण (जैसे स्टाइलकॉप) को झुकाएं जो यह जांच सकते हैं? – Alek86

संबंधित मुद्दे