2012-08-01 20 views
5

को बाध्य करना संभव है क्या एक सामान्य बाधा होना संभव है जो एक निर्बाध जेनेरिक प्रकार है?सी # असंबद्ध जेनेरिक प्रकार

उदाहरण के लिए:

public T DoSomething<T>(T dictionary) where T : IDictionary<,> 
{ 
    ... 
} 

संपादित करें: बस संदर्भ की व्याख्या करने के लिए, मैं एक IDictionary को विधि के उपयोग विवश चाहते हैं, लेकिन विधि के लिए ही यह कोई बात नहीं वास्तव में क्या TKey और TValue हैं।

+4

'सार्वजनिक वी DoSomething (आईडीकी शब्दकोश) क्या यह आपका मतलब है? – oleksii

+1

अमीर अबिरी, आप रिटर्न प्रकार पैरामीटर प्रकार 'टी' के समान क्यों होना चाहते हैं? क्या आप पैरामीटर वापस करने जा रहे हैं? इसके लिए शायद कोई ज़रूरत नहीं है। और आप आसानी से एक और 'टी' नहीं बना सकते हैं। जब तक आप 'टी: नया()' बाधा नहीं लेना चाहते हैं। –

उत्तर

6

यह संभव नहीं है, आप प्रकार पैरामीटर निर्दिष्ट करना होगा:

public T DoSomething<T, TKey, TValue>(T dictionary) where T : IDictionary<TKey, TValue> { ... } 
+1

आपको मजाकिया बात यह है कि टीके और टीवीएयू को टी से अनुमानित किया जा सकता है और मुझे विधि के शरीर में कहीं भी उनकी आवश्यकता नहीं है। इसलिए मैंने जेनेरिक हस्ताक्षर क्लीनर बनाने की उम्मीद की थी। –

+0

@AmirAbiri - क्या आप इसके बजाय गैर-जेनेरिक 'IDictionary'' 'टी' को रोक सकते हैं? – Lee

+0

वास्तव में मैंने उदाहरण को सरल बनाने के लिए केवल आईडीictionary का उपयोग किया था। मेरा असली प्रकार "बेसगेमस्टेट " का कोई सबक्लास है (यानी टी एक इंटरफेस नहीं है, यह मेरी खुद की बेस क्लास है)। –

0

नहीं, आप ऐसा नहीं कर सकते। शायद तुम

public IDictionary<TKey, TValue> DoSomething<TKey, TValue>(IDictionary<TKey, TValue> dictionary) 
{ 
... 
} 
1

उपयोग कर सकते हैं rosylin github में कोई मुद्दा नहीं है, तथापि, यह अभी तक नहीं किया है। तो अभी यह संभव नहीं है, लेकिन मुझे उम्मीद है कि यह अपेक्षाकृत जल्द ही होगा।

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