2010-02-24 9 views
24

वहाँ एक कारण है कि मैं निम्नलिखित नहीं कर सकता है:मैं foreach क्यों नहीं कर सकता (DataTable.Rows में var आइटम)?

foreach (var Item in DataTable.Rows) { 

बल्कि

foreach (DataRow Item in DataTable.Rows) { 

करने के लिए मैं सोचा होगा यह संभव हो गया था, जैसे कि यह अन्य डेटाटाइप्स पर है की तुलना में। उदाहरण के लिए:

foreach (var Employee in Staff) { // string[] Staff etc... 

जब मैं पहली बार foreach पाश की कोशिश, मैं त्रुटि CS0021: प्रकार 'वस्तु' की अभिव्यक्ति के लिए [] के साथ अनुक्रमण लागू नहीं कर सकता।

संकलक क्यों नहीं समझ सकता है। पंक्तियां DataRows का संग्रह लौटाती हैं?

उत्तर

25

Rows प्रभावी रूप से रिटर्न IEnumerable (DataRowCollection), इसलिए संकलक केवल var के लिए प्रकार के रूप में object चुन सकते हैं। यदि आप var का उपयोग करना चाहते हैं तो Rows.Cast<DataRow> का उपयोग करें।

CastEnumerable पर परिभाषित किया गया है, इसलिए आपको सिस्टम.लिंक शामिल करना होगा।

+0

जेनरिक से पहले datatables थे? –

+0

@ अरनिस: बिल्कुल, डेटाटेबल 1.0 के बाद से रहा है। –

+0

तो - मुझे लगता है कि यह वास्तविक कारण है। स्पष्टीकरण के लिए Ty जॉन। :) –

20

ब्रायन इस का कारण के बारे में बिल्कुल सही है, लेकिन यह से बचने का एक सरल तरीका है: का उपयोग :

foreach (var row in DataTable.AsEnumerable()) 
{ 
    ... 
} 
+0

इस तरह के निफ्टी समाधान के लिए धन्यवाद :) मैंने स्वीकृत उत्तर ब्रायन के रूप में रखा है लेकिन आपका उपयोग करेगा। अब समय के बारे में कुछ और पढ़ें ... – GateKiller

+8

मैं कहूंगा कि समस्या का वास्तविक समाधान इस उदाहरण में var का उपयोग नहीं करेगा ... – cjk

+1

@ck: सहमत है, लेकिन यह 'AsNumerable' के बारे में जानने योग्य है अन्य LINQ विधियों के साथ जुड़ने के लिए। –

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