将多个FileSystemInfo数组合并到一个FileSystemInfo集合中

时间:2020-01-30 15:29:54

标签: vb.net

我已经使用FileSystemInfo()方法从五个不同的目录中创建了五个DirectoryInfo.GetFileSystemInfos()数组。

我需要知道如何将所有五个FileSystemInfo数组合并为一个集合,或者如何从五个不同的目录中获取一个FileSystemInfo集合。

例如:

Dim dir1 As New DirectoryInfo(str_fromPath1)
Dim dir2 As New DirectoryInfo(str_fromPath2)
Dim dir3 As New DirectoryInfo(str_fromPath3)
Dim dir4 As New DirectoryInfo(str_fromPath4)
Dim dir5 As New DirectoryInfo(str_fromPath5)

Dim FSinfo1 As FileSystemInfo() = dir1.GetFileSystemInfos
Dim FSinfo2 As FileSystemInfo() = dir2.GetFileSystemInfos
Dim FSinfo3 As FileSystemInfo() = dir3.GetFileSystemInfos
Dim FSinfo4 As FileSystemInfo() = dir4.GetFileSystemInfos
Dim FSinfo5 As FileSystemInfo() = dir5.GetFileSystemInfos

Dim SINGLE_FSinfo_ALL As FileSystemInfo   ???

2 个答案:

答案 0 :(得分:1)

    Dim SINGLE_FSinfo_ALL As New List(Of FileSystemInfo)
    SINGLE_FSinfo_ALL.AddRange(FSinfo1)
    SINGLE_FSinfo_ALL.AddRange(FSinfo2)
    '...  etc.

答案 1 :(得分:1)

您可以将所有数组分组到一个容器中,并使用Linq的SelectMany()根据包含的所有子数组的内容生成一个List(Of FileSystemInfo)
或以类似方式创建新数组:

从所有现有阵列生成 List(Of FileSystemInfo)

Dim fsInfoList = {FSinfo1, FSinfo2, FSinfo3}.SelectMany(Function(arr) arr).ToList()

或生成一个新的 FileSystemInfo() 数组,该数组是所有其他数组的 sum

Dim fsInfo_All() = {FSinfo1, FSinfo2, FSinfo3}.SelectMany(Function(arr) arr).ToArray()

或者生成一个 FileSystemInfo()() 锯齿状数组。
在这种情况下,单个数组集合中的所有元素都与其他元素不同,并且仍然可以使用 old 索引进行访问:

Dim fsInfo_All = {FSinfo1, FSinfo2, FSinfo3}

►另一种可能性。为什么不从头开始在单个集合中组织FileInfo()数组,然后在需要时提取所有(或子集)的内容?
例如,使用 Dictionary(Of String, FileSystemInfo())

Dim allDirectories As New Dictionary(Of String, FileSystemInfo())()
allDirectories.Add("Some Path", New DirectoryInfo(SomePath).GetFileSystemInfos())
allDirectories.Add("Search Result", New DirectoryInfo(AnotherPath).GetFileSystemInfos())

' fsInfoAll is a List(Of FileSystemInfo)
Dim fsInfoAll = allDirectories.SelectMany(Function(dict) dict.Value).ToList()

在这种情况下,您还可以通过键或索引访问单个集合。