将两个 fileinfo[] 相加

Adding two fileinfo[] together

FileInfo[] comList = new FileInfo[]{};
FileInfo[] files
DirectoryInfo dInfo;
string[] folderList = path.Split(',');
foreach (string folder in folderList){
    dInfo = new DirectoryInfo(folder);
    files = dInfo.GetFiles().Where(F => extensions.Contains(f.Extension.ToLower())).ToArray();
    comList.Concat(files);
}

我正在尝试读取多个文件夹并将所有文件放入一个 FileInfo[],但是在对 comList 进行连接之后,我的 comList 仍然是空的。

路径输入类似于string path = "pathA,pathB,pathC" 如果这不是这样做的方法,那么将不同目录中的所有文件整合到一个文件中的更好方法是什么。

根据 Microsoft documentation Concat 将 returns 一个新集合而不修改现有集合:

public static System.Collections.Generic.IEnumerable<TSource> Concat<TSource> (
  this System.Collections.Generic.IEnumerable<TSource> first, 
  System.Collections.Generic.IEnumerable<TSource> second);

因此,在您的场景中,如下所示将语句分配回 comList,您就可以开始了!

comList = comList.Concat(files);

尽管如此,如果您不限制自己为 comList 使用数组,您可以考虑使用 List,这样我们就可以在没有冗余转换的情况下实现相同的效果:

List<FileInfo> comList = new List<FileInfo>();
...
foreach (string folder in folderList) {
   var dInfo = new DirectoryInfo(folder);
   var files = dInfo.GetFiles().Where(f => 
                 extensions.Contains(
                   f.Extension.ToLower()));

   comList.AddRange(files);
}

您需要使用 comList.Concat(files) 的 return,例如:

comList = comList.Concat(files).ToArray();

需要 ToArray() 方法,因为 Concat() return 是 IEnumerable。 或者,您可以将 comList 设为实际的 List<FileInfo> 并在每次迭代中使用其 AddRange 方法:

comList.AddRange(files);