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所暗示的。

编辑:那时你会得到一个不同的错误,根据史蒂夫的帖子......但他没有更正语法。我怀疑你想要:

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 回答