2010-03-16 19 views
5
public static ArrayList GetStudentAsArrayList() 
{ 
    ArrayList students = new ArrayList 
    { 
     new Student() { RollNumber = 1,Name ="Alex " , Section = 1 ,HostelNumber=1 }, 
     new Student() { RollNumber = 2,Name ="Jonty " , Section = 2 ,HostelNumber=2 } 
    }; 
    return students; 
} 

निम्नलिखित कोड संकलित नहीं करता है। त्रुटि ArrayList is not IEnumerableLINQ: यह क्वेरी ArrayList पर क्यों काम नहीं करती है?

ArrayList lstStudents = GetStudentAsArrayList(); 
var res = from r in lstStudents select r; 

है यह संकलित:

ArrayList lstStudents = GetStudentAsArrayList(); 
var res = from Student r in lstStudents select r; 

किसी को भी व्याख्या कर सकते हैं क्या अंतर इन दोनों के टुकड़े के बीच है? दूसरा काम क्यों करता है?

उत्तर

9

चूंकि ऐरेलिस्ट आपको विभिन्न प्रकार की वस्तुओं को इकट्ठा करने की अनुमति देता है, इसलिए संकलक को यह नहीं पता कि उसे किस प्रकार संचालित करने की आवश्यकता है।

दूसरी क्वेरी स्पष्ट रूप से छात्र को टाइप करने के लिए ArrayList में प्रत्येक ऑब्जेक्ट को स्पष्ट करती है।

ArrayList के बजाय List<> का उपयोग करने पर विचार करें।

2

सरणी सूची untyped है इसलिए आपको परिभाषित करना होगा कि आप किस प्रकार की अपेक्षा करते हैं। सूची वर्ग का प्रयोग करें जो दृढ़ता से जेनरिक के साथ टाइप किया गया है।

List<Student> lstStudents = GetStudentAsArrayList(); 
var res = from r in lstStudents select r; 
6

दूसरे मामले में, आप LINQ को बता रहे हैं कि संग्रह का प्रकार क्या है। ArrayList दुर्बलता से, आपके द्वारा लिखा गया है, ताकि क्रम में यह LINQ में प्रभावी ढंग से उपयोग करने के लिए आप कास्ट < टी > उपयोग कर सकते हैं:

IEnumerable<Student> _set = lstStudents.Cast<Student>(); 
1

ध्यान दें कि त्रुटि मैं अपने टुकड़ा के लिए मिलता है:

एक नहीं मिल सका का स्रोत प्रकार 'सिस्टम.कोलेक्शन.एरेलेलिस्ट' के लिए क्वेरी पैटर्न का कार्यान्वयन। 'चयन' नहीं मिला। पर विचार करें रेंज चर 'आर' के प्रकार को स्पष्ट रूप से निर्दिष्ट करें।

तो मुझे विश्वास है कि एक वैकल्पिक समाधान (लगभग निश्चित रूप से आपको बेहतर दिमाग नहीं है) ArrayList के लिए एक चयन एक्सटेंशन विधि को परिभाषित करना है।

मुझे लगता है कि अलग-अलग त्रुटि अन्य नामस्थानों के कारण है।

+0

कुछ के रूप में यह सीधे सवाल का जवाब मैं जोड़ने चाहिए, दूसरा (काम) संस्करण आंतरिक रूप lstStudents.Cast () का चयन आर में आर से वर रेस = के रूप में कार्यान्वित किया जाता है; –

-1

ArrayList.Cast().Select()

+3

-1 क्योंकि यह प्रश्न का उत्तर नहीं देता है। –

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