2

このコード行を実行しようとしています:

Dim OrderedFiles() As String = Directory.GetFiles(FilePath).OrderBy(x >= x.CreationTime)

x が宣言されていないという x に関するエラーが表示されます。

プロジェクトを Option Strict Off と Option Infer On に設定しています。Option Strict をオンにすると、プロジェクトから何千ものエラーが発生し (継承されます)、それらすべてを修正する時間がありませんが、x でエラーが発生しなくなりました。コンピューターを窓から投げ捨てたいと思うまで、グーグルで検索しました。

このステートメントを修正する方法についての助けをいただければ幸いです。

編集:

私はよりエレガントな解決策を望んでいましたが、この特定の問題を解決するために私が思いついたものは次のとおりです。

    Dim fileList() As String = Directory.GetFiles(FilePath)
    Dim fileDate(fileList.Length - 1) As DateTime

    For i As Integer = 0 To fileList.Length - 1
        fileDate(i) = New FileInfo(fileList(i)).CreationTime
    Next

    Array.Sort(fileDate, fileList)

    With EmailTemplates_DropDownList
        .DataSource = fileList.Reverse.Take(5)
        .DataBind()
    End With

特にエレガントではありませんが、仕事はします。私はワンライナーのLINQソリューションを望んでいましたが、LINQのバックグラウンドがなく、仕事をする方法を知りません。本を買いに行く時間です。

4

2 に答える 2

5

この構文をどこから入手したのかわかりません:

OrderBy(x >= x.CreationTime)

それはほとんどのC#構文のように見えます

OrderBy(x => x.CreationTime)

しかし、私はあなたが使用するVBを信じています

OrderBy(Function(x) x.CreationTime)

それは確かにの例Enumerable.OrderByが示唆するものです。

編集: その時点で、Steve の投稿によると、別のエラーが発生します... しかし、彼は構文を修正していません。私はあなたが欲しいと思う:

Dim OrderedFiles() As FileInfo = new DirectoryInfo(FilePath).GetFiles(). 
                                        OrderBy(Function(x) x.CreationTime).
                                        ToArray()
于 2012-05-24T22:43:28.653 に答える
2

Directory.GetFiles() は、指定されたディレクトリ内のファイルの名前 (パスを含む) を返します。x.CreationTime は使用できません。x は文字列です

おそらくDirectoryInfoを使用する必要があります

Dim di as DirectoryInfo = new DirectoryInfo(FilePath)
Dim OrderedFiles = di.GetFiles().OrderBy(Function(x) x.CreationTime).Take(3)
Dim fi as FileInfo
For each fi in OrderedFiles
    Console.WriteLine(fi.FullName)
Next
于 2012-05-24T22:44:18.550 に答える