2011-12-31 3 views
7

निम्नलिखित कोड पर विचार करें। मैं इसे सी # में कैसे कर सकता हूं?एक सामान्य प्रकार के enum होने के लिए कैसे बाध्यकारी?</p> <pre><code>class Base<T> { //Base members } </code></pre> <p>मैं (यदि संभव हो तो बाधाओं का प्रयोग करके) सामान्य टी एक enum होना चाहते हैं:

संपादित करें:
का उपयोग कोड आकाश Kava- द्वारा -introduced अनुबंध भी एक अच्छा तरीका की तरह लगता है। मैं इसे एक रन टाइम त्रुटि उत्पन्न करने में कामयाब रहा जो बेकार है। Here कोड मैंने कोशिश की। एक संकलन समय चेतावनी उत्पन्न करना संभव होना चाहिए लेकिन मैं इसे काम नहीं कर सकता।

+1

यह एक डुप्लिकेट है, है ना? – BoltClock

+3

डुप्लिकेट करने के लिए लिंक कृपया? – atoMerz

+0

उनमें से बहुत सारे, लेकिन मुझे पता चलने वाले कैननिकल में से एक है http://stackoverflow.com/questions/79126/create-generic-method-constraining-t-to-an-enum, जो हालांकि एक सामान्य विधि के बारे में है , एक सामान्य वर्ग नहीं, प्रकार की बाधाएं वैसे भी वैसे ही काम करती हैं। – BoltClock

उत्तर

12

यह आईएल स्तर पर समर्थित है लेकिन सी # में नहीं है। आप जॉन स्कीट द्वारा लिखित unconstrained melody पर एक नज़र डाल सकते हैं जो आपको इसे प्राप्त करने की अनुमति देता है। और यहां संबंधित blog post है जहां वह विवरण में बताते हैं।

+1

आश्चर्यचकित सी # में कोई रास्ता नहीं है। :( – atoMerz

+0

जिज्ञासा से बाहर, क्या आईएल एक एनम-बाधित जेनेरिक को कुछ भी करने की इजाजत देता है जो एक असंवेदनशील जेनेरिक धीमी 'एनम। हैसफ्लैग' का आह्वान करने के अलावा अन्य कर सकता है? मेरा अनुमान होगा कि सी # चालक दल ने आईएल समर्थन के स्तर का फैसला किया लोग एनम-बाधित जेनेरिक के साथ क्या करना चाहते हैं, और सोचा (गलत तरीके से आईएमएचओ) के लिए अपर्याप्त होना चाहिए कि उन्हें अनुमति देने के बजाय उन्हें अस्वीकार करना बेहतर होगा, लेकिन उन्हें अधिक करने में सक्षम नहीं होना चाहिए। – supercat

+0

[ExtraConstraints.Fody] (https://github.com/Fody/ExtraConstraints) सभी आईएल-बुनाई को एक बहुत ही सरल तरीके से प्राप्त करने के लिए। बस nuget पैकेज 'फोडी' और' ExtraConstraints.Fody' इंस्टॉल करें और जैसा कि दिखाया गया है, कोड में बाधाएं जोड़ें रेपो। शायद आप इसे उत्तर में जोड़ना चाहते हैं? – BatteryBackupUnit

1

.NET 4.0 इसके बाद आप कोड अनुबंध, http://msdn.microsoft.com/en-us/devlabs/dd491992 का उपयोग करके चेतावनियां बना सकते हैं, इससे आपको कुछ पूर्व शर्त जांचने और डेवलपर को चेतावनियां प्रदर्शित करने की सुविधा मिल जाएगी।