2010-05-10 8 views
5

उदाहरण:कुछ .NET Framework क्लासेस जेनरिक्स का उपयोग क्यों नहीं कर सकते हैं?

System.Web.Security.MembershipCollection लागू करता IEnumerable और नहीं IEnumberable<T>। यह बाद में लागू क्यों नहीं करता है, जब ऐसा लगता है कि यह बेहतर होगा (उदा। LINQ का उपयोग करें)?

या, क्या यह आवश्यक नहीं है?

उत्तर

10

आप Cast<T>() समारोह या OfType<T>() फ़ंक्शन का उपयोग करके किसी भी IEnumerable साथ LINQ का उपयोग कर सकते हैं। यदि आपको विश्वास है कि IEnumerable में केवल एक विशेष प्रकार की वस्तुएं हैं, तो Cast<T>() थोड़ा तेज़ होगा।

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

ArrayList foo = new ArrayList(); 

foo.Add("bar"); 
foo.Add("baz"); 

var bar = foo.Cast<string>().Select(s => s.ToUpper()); 

कई मौजूदा वर्गों (जैसे ArrayList) जो .NET में जेनरिक के आगमन से पहले से ही अस्तित्व में हैं, इसलिए वे अभी भी गैर-सामान्य हैं।

+0

यह कितना प्रदर्शन हिट होगा? –

+0

@ क्रिस: 'कास्ट' के साथ बहुत छोटा, और 'ऑफ टाइप' के साथ बहुत ही मामूली (क्योंकि टाइपिंग जांच दो बार की जाती है)। –

2

इन वर्गों में अक्सर जेनेटिक्स से पहले की तारीख थी। नेट में ऐसे कई वर्गों में सामान्य समकक्ष हैं लेकिन सभी नहीं। कामकाज भी हैं। जैसे linq के साथ किसी भी गैर जेनेरिक संग्रह को Cast() और OfType() एक्सटेंशन विधियों का उपयोग करके linqy और जेनेरिक बनाया जा सकता है।

+0

+1 "linqy" –

+0

का उपयोग करने के लिए +1 एक अच्छा शब्द है, लेकिन मैं अपने एएसपीनेट पेज पर UpdatePanels का एक समूह जोड़ने के बाद एक सहयोगी द्वारा बनाई गई पसंद को पसंद करता हूं। उन्होंने घोषित किया कि उन्होंने अपने पृष्ठ को "अजाक्सित" किया था ;-) –

2

ध्यान रखें कि हमारे द्वारा उपयोग किए जा रहे बीसीएल प्रकारों में से कई जेनेरिक से पहले हैं, जो 2.0 में पहुंचे थे। हालांकि, आप अभी भी उनमें से कई के साथ LINQ का उपयोग कर सकते हैं, आपको बस थोड़ा अतिरिक्त काम करना है।

ArrayList arrayList = new ArrayList(); 
arrayList.Add(1); 
arrayList.Add(2); 

var query = from item in arrayList.OfType<int>() select item; 
+2

यह केवल * int * प्रकार के तत्वों को एररेलिस्ट में फ़िल्टर करेगा। –

12

इतिहास मायने रखता है। जेनेरिक हमेशा मौजूद नहीं थे, इसलिए आप जेनिक्स के आगमन से पहले डिजाइन किए गए वर्गों और एपीआई का सामना कर सकते हैं।

इसके अलावा, लक्षित दर्शकों के मामले भी हैं।

तालमेल: जेनेरिक्स के कुछ उन्नत सुविधाओं का उपयोग कर एपीआई कुछ डेवलपर्स के लिए उपयोग करने के लिए भी मुश्किल हो सकता है कि कुछ सुविधाएं से डेवलपर ऑडियंस problems understanding generics हो सकता है लक्षित कर रहे हैं। जेनेरिक्स की अवधारणा, व्यापक रूप से समझा नहीं जा सका है, कुछ मामलों में वाक्य रचना समस्याएं पैदा कर सकते हैं और किसी भी बड़े नई सुविधा के रूप में, जेनेरिक्स कुछ प्रवेश स्तर के डेवलपर्स के लिए एक महत्वपूर्ण सीखने की अवस्था आ सकते हैं।

हाँ, बोली, 2004 से है, लेकिन कुछ नहीं तो नेट एपीआई तुम आज का उपयोग का सबसे 2005 में बाहर आया था, इसलिए बोली वास्तव में बहुत ही प्रासंगिक है।

+2

+1 पिछली चर्चाओं में डब्ल्यू/एमएस कर्मियों में, वे सार्वजनिक एपीआई में ब्रेकिंग परिवर्तन (या इंटरफेस में भी जोड़ों में बदलाव करने के लिए बहुत ही कमजोर हैं - क्योंकि यह मौजूदा इंटरफ़ेस कार्यान्वयन को तोड़ देगा)।यदि आप शुद्ध उपभोक्ता हैं, तो यह गधे में दर्द की तरह लगता है, लेकिन एक बार जब आप अपनी स्थिति में होते हैं (दूसरों की खपत के लिए एपीआई उत्पन्न करते हैं), तो आप जल्दी ही सहानुभूति देना शुरू कर देते हैं और इसी तरह के प्रथाओं का पालन करते हैं क्योंकि यह आपके जीवन को आसान बनाता है और नए, बेहतर समर्थित संस्करणों के अधिक तेज़ी से गोद लेने की सुविधा प्रदान करता है। –