我正在尝试运行这行代码:
Dim OrderedFiles() As String = Directory.GetFiles(FilePath).OrderBy(x >= x.CreationTime)
我在x上收到错误,说x未声明。
我的项目设置为Option Strict Off和Option Infer On。如果我打开Option Strict然后我从项目中获得了数千个错误(它被继承)并且我没有时间修复所有错误,但是x不再给我一个错误。我用Google搜索,直到我想把电脑扔出窗外。
任何有关如何更正此声明的帮助将不胜感激。
编辑:
我希望有一个更优雅的解决方案,但这就是我想出来解决这个特殊问题的方法。
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的背景知道如何做这个工作,有时间去买书。
答案 0 :(得分:5)
我不确定你从哪里获得这种语法:
OrderBy(x >= x.CreationTime)
几乎看起来像
的C#语法OrderBy(x => x.CreationTime)
但我相信你会使用
OrderBy(Function(x) x.CreationTime)
这肯定是Enumerable.OrderBy
中的例子。
编辑:那时你会得到一个不同的错误,根据史蒂夫的帖子......但他没有纠正语法。我怀疑你想要:
Dim OrderedFiles() As FileInfo = new DirectoryInfo(FilePath).GetFiles().
OrderBy(Function(x) x.CreationTime).
ToArray()
答案 1 :(得分: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