शीर्षक के अनुसार, क्या सी # 4 में टाइप-नकारात्मक बाधाओं को घोषित करना संभव है?जेनेरिक नहीं बाधा जहां टी:! IENumerable
उत्तर
नहीं - सी # या सीएलआर में ऐसी कोई अवधारणा नहीं है।
क्या यह अवधारणा भविष्य में सी # और/या सीएलआर को लाएगी? –
@RandRandom: मैंने इसके लिए किसी भी योजना के बारे में नहीं सुना है। –
नहीं, लेकिन इसके साथ एक "है" जाँच करने के लिए संभव हो जाएगा और फिर संभाल यह उचित रूप से ...
आप एक बाधा उपयोग करें ताकि आप सुनिश्चित कर सकते हैं प्रकार आप का उपयोग कुछ गुण/तरीकों है/.. आप का उपयोग करना चाहते हैं।
एक प्रकार की नकारात्मक बाधा वाली जेनेरिक कोई समझ नहीं लेता है, क्योंकि कुछ गुणों/विधियों की अनुपस्थिति जानने के लिए कोई उद्देश्य नहीं है आप का उपयोग नहीं करना चाहते हैं।
स्पष्ट रूप से आपको त्रुटि प्राप्त नहीं हुई है: ## '
नहीं हो सकता है, मैं इसी परिदृश्य के उदाहरण को लागू करने वाले सार तत्वों की एक श्रृंखला का उपयोग कर अपने परिदृश्य के आसपास काम करने में सक्षम था, और सार वर्ग का उत्तराधिकारी .. मुझे लगता है इस तरह एक्शन
जहाँ तक मुझे पता है कि ऐसा करना संभव नहीं है।
आप क्या कर सकते कुछ क्रम चेकिंग है:
इस के लिएpublic bool MyGenericMethod<T>()
{
// if (T is IEnumerable) // don't do this
if (typeof(T).GetInterface("IEnumerable") == null)
return false;
// ...
return true;
}
आप इस तरह 'is' का उपयोग नहीं कर सकते - यह परीक्षण करता है कि एक * ऑब्जेक्ट * एक प्रकार के साथ संगत है या नहीं। –
आपका मतलब क्या है 'अगर (टाइपोफ (टी) == टाइपऑफ (आईनेमरेबल)) {} ' – kev
एक का उपयोग एक विकल्प प्रकार होगा।
public class Option<A,B>
where A : !B
where B : !A
{
private readonly A a;
private readonly B b;
private Option(){}
public Option(A a)
{
this.a = a
}
public Option(B b)
{
this.b = b
}
}
रनटाइम जांच निश्चित रूप से काम करेगी लेकिन आपको संकलन समय पर प्रकार की जांच का लाभ नहीं होगा।
void doIt<T>(IEnumerable<T> what) { }
void doIt<T>(T whats) { }
मैं अपवादितपहली विधि संदर्भ के लिए निम्नलिखित कोड:
doIt(new List<T>());
मैं इसी मामले टिप्पणी में उल्लेख किया है को लागू करने की कोशिश कर मेरी आत्म पाया लेकिन यह वास्तव में संदर्भ दूसरा है।
doIt(new List<T>().AsEnumerable<T>());
डाली एक और अधिभार से छिपा हो सकता है:
void doIt<T>(List<T> whats) {
doIt(whats.AsEnumerable<T>());
}
- 1. सी # जेनेरिक बाधा जहां वर्ग नहीं है?
- 2. जेनेरिक की कमी है, जहां टी: struct और जहां टी: वर्ग
- 3. जेनेरिक बाधा
- 4. जेनेरिक टी
- 5. सी # जेनेरिक बाधा अपेक्षित काम नहीं कर रही है
- 6. जेनेरिक विधि एकाधिक (या) प्रकार बाधा
- 7. सी # जेनिक्स: टी को रोकना जहां टी: ऑब्जेक्ट संकलित नहीं करता है; त्रुटि: बाधा विशेष वर्ग 'वस्तु'
- 8. जहां टी: एकाधिक वर्ग
- 9. टी "उदाहरण के टी" की अनुमति क्यों नहीं है जहां टी एक प्रकार पैरामीटर है और टी एक चर है?
- 10. "जहां टी: कुछवल" का अर्थ है?
- 11. IEnumerable <T> को IEnumerable कास्ट जब टी संकलन समय
- 12. "संपत्ति एक्स" बाधा के साथ जेनेरिक फ़ंक्शन?
- 13. टी-एसक्यूएल विदेशी कुंजी जांच बाधा
- 14. जेनेरिक क्लास घोषणा के साथ नेमस्पेस बाधा
- 15. टी पर जेनेरिक बाधा संदर्भ प्रकार और मूल्य प्रकार के साथ-साथ?
- 16. "टी टी: कक्षा" बाधा से मेल खाने के लिए आप टी को कक्षा में कैसे डाल सकते हैं?
- 17. बाधा पहुंच के साथ जेनेरिक क्लास
- 18. जेनेरिक विधि तर्कों पर इंटरफ़ेस बाधा
- 19. जेनेरिक प्रकार एकीकरण: एकाधिक पैरामीटर (टी, टी) बनाम एकाधिक पैरामीटर सूचियां (टी) (टी)?
- 20. "जहां टी: नया()" दिया गया है, "नया टी()" एक्टिवेटर का उपयोग करता है। आंतरिक प्रवेश करें?
- 21. List.toArray (टी []) के विषम जेनेरिक व्यवहार
- 22. टी-एसक्यूएल और जहां% पैरामीटर% खंड
- 23. हास्केल "नहीं" टाइप बाधा
- 24. नया() कहां है जहां टी: नया()? `
- 25. सी # इंटरफ़ेस <T> {टी समारोह <T> (टी टी);}: जेनेरिक वापसी प्रकार
- 26. asInstanceOfOpt [टी] के रूप में कैसे लिखें [टी] जहां टी <: कोई
- 27. जेनेरिक पैरामीटर
- 28. जेनरिक और प्रतिबिंब - जेनेरिक आर्ग्यूमेंट्स [0]
- 29. टी - टाइप.गेट टाइप ("टी []")
- 30. क्यूई (टी) और स्टैक (टी) क्यों आईसीओलेक्शन (टी) लागू नहीं करते हैं?
भले ही थे, तो आप एक उपयोग के मामले का वर्णन कर सकते
एक समाधान डाली इस तरह तर्क करने के लिए है? –
यह देखने के लिए अजीब बात है कि आपको ऐसी आवश्यकता है। आप केवल उस प्रकार के टी के खिलाफ कोड कर सकते हैं जिसे आप जानते हैं जो वर्ग के परिवार से संबंधित है। अन्यथा जेनेरिक में आप कैसे कोड कर सकते हैं? या तो आपको इस मामले में जेनेरिक की आवश्यकता नहीं है या आपको अपने उपयोग-मामलों को संशोधित करने की आवश्यकता है। –
ब्याज का उपयोग-मामला निम्नलिखित ओवरलोड को सह-अस्तित्व में रखने की अनुमति देना था 'void (टी क्या) {} '' void doIt (IENumerable क्या है) {} '- इस समय अस्पष्टता है क्योंकि' टी 'पहली विधि में' IENumerable <> 'हो सकता है (इसलिए मैं यह निर्दिष्ट करना चाहता हूं कि' टी' 'IENumerable' नहीं होना चाहिए) ... –
Cel