2008-12-11 11 views
27

मैं अपनी पहली जेनेरिक सूची बनाने की कोशिश कर रहा हूं और कुछ समस्याओं में भाग गया हूं। मैं समझता हूं कि घोषणा "List<T>" जैसी दिखती है, और मेरे पृष्ठ के शीर्ष पर मेरे पास using System.Collections.Generic; है। हालांकि, विजुअल स्टूडियो T चर को पहचानता नहीं है।सी # में जेनेरिक संग्रह क्या हैं?

मुझे क्या याद आ रही है?

+1

बुरा मत समझो, जब मैंने .NET 2.0 सीखना शुरू किया, तो मैं वही चीज़ चला गया। मैंने सोचा, "टी का मतलब क्या है, और क्यों विजुअल स्टूडियो को पता नहीं है कि मैं क्या करने की कोशिश कर रहा हूं?" –

+0

तो अगर मैं अपनी सूची में विभिन्न प्रकार की ऑब्जेक्ट्स रखना चाहता हूं तो मुझे इंटरफ़ेस का उपयोग करने की आवश्यकता है, यानी सूची, इसलिए catObj और dogObj स्टोर करें, उदाहरण के लिए? –

+1

सूची काम करना चाहिए। – Jimmy

उत्तर

43

List<T> का अर्थ List<WhateverTypeYouWantItToBeAListOf> है। उदाहरण के लिए:

अगर मैं एक कर्मचारी वर्ग है, और मुझे कर्मचारियों का एक संग्रह करना चाहता था, मैं कह सकते हैं:

List<Employee> employeeList = new List<Employee>(); 

मैं तो उस सूची को Employee वस्तुओं जोड़ सकते हैं, और यह होना है type- सुरक्षित और विस्तारित हालांकि कई कर्मचारी वस्तुओं को मैं इसमें डालता हूं।

तो जैसा

:

Employee emp1 = new Employee(); 
Employee emp2 = new Employee(); 

employeeList.Add(emp1); 
employeeList.Add(emp2); 

employeeList अब emp1 और emp2 वस्तुओं के रूप में रखती है।

जेनेरिक संग्रहों के लिए कई पहलू हैं, सबसे महत्वपूर्ण यह है कि वे ऑब्जेक्ट को स्वतंत्र तरीके से ... ... वस्तुओं का संग्रह प्रदान करते हैं। वे टाइप-सुरक्षित हैं; जिसका अर्थ है कि किसी भी संग्रह में एक प्रकार की वस्तु होगी। जब तक, बेशक, कर्मचारी एक आधार वर्ग कि से Animal इनहेरिट करती है। उस समय, हालांकि, आप बड़ी समस्याओं है आप List<Employee> के अंदर एक Animal उदाहरण के लिए नहीं होगा (। जेनेरिक्स साथ

प्रोग्रामिंग अपने स्वयं के विषय है, एक किताब में कम से कम एक अध्याय के योग्य (बहुत कम स्तर पर, जेनेरिक के साथ प्रोग्रामिंग कोड का पुन: उपयोग करने का एक और तरीका प्रदान करता है - किसी भी वर्ग पदानुक्रम या किसी विशिष्ट वर्ग के कार्यान्वयन विवरण से स्वतंत्र।

अधिक जानकारी here

2

क्या आप सूची कक्षा का उपयोग करने की कोशिश कर रहे हैं या आप अपना खुद का निर्माण करने की कोशिश कर रहे हैं? इस समय आपका कोड कैसा दिखता है?

List<int> list = new List<int>(); 

T, एक प्रकार पैरामीटर है कि अपने कोड में एक वास्तविक प्रकार होना चाहिए:

7

उदाहरण के लिए यदि आप पूर्णांक (int) की एक सामान्य सूची आप लिखते थे चाहता था।

List<int> values = new List<int>(); 

values.Add(1); 
values.Add(2); 

int secondNumber = values[1]; // Yay! No casting or boxing required! 
10

आप किसी अन्य int जैसे, string टाइप करें या अपनी रचना के एक वर्ग के लिए T स्थानापन्न करने की जरूरत है टाइप नाम उस वास्तविक 'प्रकार' ऑब्जेक्ट के लिए प्लेसहोल्डर है जिसे आपने जेनेरिक सूची में डाल दिया था, जब आप इसे तुरंत चालू करेंगे।

4

आप घोषणा फू की एक सूची तो जैसे वस्तुओं:

List<Foo> fooList; 

में

5

एक चर नाम के रूप में T पर विचार करें। आपको अपना मान निर्दिष्ट करना होगा, यानी बनाना जेनेरिक क्लास 'विशिष्ट'। तो, आप जो कुछ भी चाहते हैं उसके List<string>, List<int>, या List बना सकते हैं।

3

जब आप List<Object> करते हैं, तो सुनिश्चित करें कि आपका ऑब्जेक्ट क्लास सार्वजनिक है। डिफ़ॉल्ट वीएस इंस्टॉलेशन में, कक्षाएं 'आंतरिक' के रूप में बॉक्स से बाहर आती हैं - जिसका अर्थ है कि आप उनकी सूची नहीं बना सकते हैं क्योंकि वे सार्वजनिक सूची की तुलना में कम पहुंच योग्य हैं।

यह मुझे उम मिला ... कल। बेवकूफ चूक।

6

क्या "सामान्य सूची" जेनेरिक तथ्य यह है कि आप सेब की सूची बनाने और आलू की एक सूची बनाने के लिए उसी कक्षा का उपयोग कर सकते हैं। बेशक एक बार जब आप new ऑपरेटर के साथ एक सूची बनाते हैं तो आपको यह तय करना होगा कि आप कौन सी ऑब्जेक्ट्स को स्टोर करना चाहते हैं और <> में आपके द्वारा संग्रहीत वस्तुओं का प्रकार नाम डालकर अपने निर्णय को संवाद करें।

List<Employee> employeeList = new List<Employee>(); 

"; और employeeList नाम पर है अरे, मैं एक सूची है कि प्रकार Employee की वस्तुओं संभाल कर सकते हैं की जरूरत है":

निम्न पंक्ति वास्तव में संकलक बताता है

सूची वस्तु जो आपको मिलती है वह अब सामान्य नहीं है। यह केवल Employee प्रकार की वस्तुओं को स्वीकार और वापस कर देगा। लेकिन सूची का व्यवहार "जेनेरिक" तरीके से परिभाषित किया गया है जो इस बात पर परवाह नहीं करता कि यह वास्तव में किस वस्तु के साथ काम कर रहा है। यह उन्हें आंतरिक रूप से 'T' कहता है क्योंकि सूची के लिए जो कुछ भी करना है, उसके लिए सामग्री का प्रकार वास्तव में कोई फर्क नहीं पड़ता।

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