2010-06-10 20 views
5

का उपयोग कर सी # में निर्देशिकाओं की जांच करें क्या कोई मुझे बता सकता है कि मैं निम्नलिखित लिंक क्वेरी के साथ क्या गलत कर रहा हूं? मैं निर्देशिका को उच्चतम अनुवांशिक मूल्य के साथ ढूंढने की कोशिश कर रहा हूं।लिंक

 DirectoryInfo[] diList = currentDirectory.GetDirectories(); 

     var dirs = from eachDir in diList 
        orderby eachDir.FullName descending      
        select eachDir; 
     MessageBox.Show(dirs[0].FullName); 

संपादित करें:

ऊपर कोड संकलन नहीं करता है, त्रुटि है कि संकलक उत्पन्न करता है:

Cannot apply indexing with [] to an expression of type 'System.Linq.IOrderedEnumerable<System.IO.DirectoryInfo> 
+2

इसके बारे में क्या काम नहीं कर रहा है? –

+0

क्या संकलक त्रुटि आपको बता रही है कि समस्या क्या है? –

+0

हां - क्षमा करें, मैंने –

उत्तर

10

आप dirs का उपयोग करने की कोशिश कर रहे हैं जैसे कि वह किसी सरणी या एक थे सूची। यह सिर्फ IEnumerable<T> है। इसे आज़माएं:

var dirs = diList.OrderByDescending(eachDir => eachDir.FullName); 
var first = dirs.FirstOrDefault(); 
// Now first will be null if there are no directories, or the first one otherwise 

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

var first = currentDirectory.GetDirectories() 
          .OrderByDescending(eachDir => eachDir.FullName) 
          .FirstOrDefault(); 
1

उपयोग

DirectoryInfo[] diList = currentDirectory.GetDirectories(); 

    var dir = (from eachDir in diList 
       orderby eachDir.FullName descending      
       select eachDir).FirstOrDefault(); 
    if (dir != null) 
    MessageBox.Show(dir.FullName); 
2

यह केवल त्रुटि संदेश पढ़ नहीं का एक मामला है।

कोड संकलन नहीं है, और यह त्रुटि संदेश पैदा करता है:

Cannot apply indexing with [] to an expression of type 'System.Linq.IOrderedEnumerable<System.IO.DirectoryInfo>'

दूसरे शब्दों में, [..] हिस्सा एक गणनीय साथ काम नहीं करता है, जो एक का उपयोग करने का परिणाम है लिंक पूछताछ

आप एक से अधिक विकल्प हैं, लेकिन यहाँ दो हैं:

  • एक सरणी में कनवर्ट, और पहला तत्व
  • उपयोग हड़पने के लिए पहले

मुझे लगता है कि Linq विस्तार विधि लेने पहली विधि एक खराब विकल्प है, इसलिए यहां कोड दूसरे के साथ दिखता है:

DirectoryInfo[] diList = currentDirectory.GetDirectories(); 

var dirs = from eachDir in diList 
      orderby eachDir.FullName descending      
      select eachDir; 
var dir = dirs.FirstOrDefault(); 
if (dir != null) 
    MessageBox.Show(dir.FullName); 
+0

के अनुसार पोस्ट को अपडेट किया है –

3

यदि आपने var का उपयोग नहीं किया है, तो त्रुटि का कारण अधिक स्पष्ट होगा।

IEnumerable<DirectoryInfo> dirs = from eachDir in diList 
       orderby eachDir.FullName descending      
       select eachDir; 
    MessageBox.Show(dirs[0].FullName); 
+0

इसे पढ़ने से त्रुटि संदेश को समझने का अधिक मामला यह है कि मैं अपने प्रकार को परिभाषित करके 'var' दृष्टिकोण से नफरत करता हूं, यह बहुत अधिक स्पष्ट है, var कीवर्ड पीछे एक बड़े कदम की तरह लगता है ... – Dal

+0

आश्चर्य है कि कंपाइलर को var के उपयोग पर चेतावनी देने के लिए कोई तरीका नहीं है जब कोई अनाम प्रकार शामिल नहीं होता है। –