簡體   English   中英

使用Linq檢查C#中的目錄

[英]Check Directories in C# using Linq

有人可以告訴我,我對以下Linq查詢做錯了嗎? 我正在嘗試找到具有最高aphanumerical值的目錄。

        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>

您正在嘗試訪問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();

如果你沒有使用var ,錯誤的原因會更清楚。

    IEnumerable<DirectoryInfo> 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>'

換句話說, [..]部分不能使用可枚舉,這是使用Linq查詢的結果。

你有多種選擇,但這里有兩個:

  • 轉換為數組,然后選擇第一個元素
  • 使用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);

使用

    DirectoryInfo[] diList = currentDirectory.GetDirectories();

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM