2009-08-28 12 views
16

क्या IList<T> आरंभ करने का कोई विशेष तरीका है? यह काम करने के लिए प्रतीत नहीं होता:आरंभ करें IList <T> सी #

IList<ListItem> allFaqs = new IList<ListItem>(); 
// Error I get here: Cannot create an instance of the interface 'IList<ListItem>' 

ReSharper इतना है कि यह प्रारंभ करने का सुझाव देते हैं:

IList<ListItem> allFaqs = null; 

लेकिन यह एक अशक्त संदर्भ अपवाद का कारण नहीं बनेगा जब मैं इस सूची में आइटम जोड़ने के लिए जाना?

या मुझे बस List<ListItem> का उपयोग करना चाहिए?

धन्यवाद!

IList<ListItem> allFaqs = new List<ListItem>(); 

अपने कोड में आप एक इंटरफेस प्रारंभ करने की कोशिश कर रहे:

उत्तर

40

त्रुटि इसलिए है क्योंकि आप इंटरफ़ेस का उदाहरण बनाने का प्रयास कर रहे हैं।

करने के लिए अपने कोड में परिवर्तित करें:

List<ListItem> allFaqs = new List<ListItem>(); 

या

IList<ListItem> allFaqs = new List<ListItem>(); 

और यह संकलन चाहिए।

आपको स्पष्ट रूप से अपने शेष कोड को भी सूट के लिए बदलना होगा।

+0

मुझे बहुत समय बचाया, धन्यवाद :) – Sijav

2

IList एक अंतरफलक ताकि आप इसे का दृष्टांत नहीं कर सकता है। कक्षाओं के सभी प्रकार IList लागू। ऐसा ही एक वर्ग है कि IList लागू करता सूची है। आप इसे इस तरह तत्काल कर सकते हैं:

List<ListItem> allFaqs = new List<ListItem>(); 
17

आपकी समस्या यह है कि IList एक इंटरफ़ेस है, कक्षा नहीं। आप एक इंटरफेस प्रारंभ नहीं कर सकते हैं।

आप एक इंटरफेस का एक उदाहरण हो सकता है, लेकिन आप एक वर्ग को लागू करता है कि इंटरफेस जैसे के साथ प्रारंभ करने की आवश्यकता:

IList<string> strings = new List<string>(); 

कोड की पूर्ववर्ती लाइन काम करेंगे, लेकिन आप केवल होगा से जो कुछ भी वर्ग आप को प्रारंभ पूरा सेट IList के सदस्यों के बजाय आप के लिए उपलब्ध।

+1

ठीक है, अगर आप धोखा दे सकते हैं ;- http://stackoverflow.com/questions/194484#1281522 –

+0

धोखे के लिए +1! धन्यवाद मार्क – Anders

2

आप एक इंटरफेस का दृष्टांत नहीं कर सकते हैं (IList एक अंतरफलक है)।

आप कुछ है कि एक IList लागू करता दृष्टांत की आवश्यकता होगी,

तो जैसे:

IList<ListItem> allFaqs = new List<ListItem>(); 

ILists के अन्य प्रकार के होते हैं, लेकिन सूची एक अच्छा एक के साथ शुरू करने के लिए है।

1

IList<T> एक इंटरफ़ेस है।आप एक वर्ग है कि इंटरफ़ेस को लागू करता है का दृष्टांत की जरूरत है:

IList<ListItem> allFaqs = new List<ListItem>(); 

List<T> लागू करता IList<T>, और इतने चर को सौंपा जा सकता। ऐसे अन्य प्रकार भी हैं जो IList<T> को भी लागू करते हैं।

2

IList एक इंटरफेस है, कक्षा नहीं। यदि आप इसे प्रारंभ करना चाहते हैं, तो आपको आंतरिक रूप से अपनी विशिष्ट आवश्यकताओं के आधार पर इसे उस वर्ग में प्रारंभ करना होगा जो IList लागू करता है। आमतौर पर, सूची को एक सूची के साथ शुरू किया जाता है।

IList<ListItem> items = new List<ListItem>(); 
6

IList एक वर्ग नहीं है; यह एक इंटरफेस है कि कक्षाएं कार्यान्वित कर सकती हैं। इंटरफ़ेस स्वयं वर्ग और कक्षा के उपभोक्ता के बीच ही एक अनुबंध है। कोड की यह पंक्ति काम करेगी:

IList<ListItem> allFaqs = new List<ListItem>(); 

क्या इससे मदद मिलती है?

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