C# 在迭代期间将值保存在数组中

C# 在迭代期间将值保存在数组中,c#,.net,C#,.net,我有一个名为GetFileList的函数。我在这里通过使用;将函数分隔开来,为该函数提供了不同的扩展;。我的问题是字符串[]中的值 第一次迭代中的文件列表在第二次迭代中丢失。如何用所有迭代中的数据填充文件列表 public static string[] GetFileList(string Directory,string extensions) { string[] extensionlist = extensions.Split(';'); FileLis

我有一个名为GetFileList的函数。我在这里通过使用;将函数分隔开来,为该函数提供了不同的扩展;。我的问题是字符串[]中的值 第一次迭代中的文件列表在第二次迭代中丢失。如何用所有迭代中的数据填充文件列表

public static string[] GetFileList(string Directory,string extensions)
   {
       string[] extensionlist = extensions.Split(';');
       FileList = new string[] { };
       foreach (string extension in extensionlist)
       {
           FileList =System.IO.Directory.GetFiles(Directory, "*." + extension, System.IO.SearchOption.AllDirectories);


       }
       return FileList;
   }
只需使用并使用列表即可:

public static string[] GetFileList(string Directory,string extensions)
   {
       string[] extensionlist = extensions.Split(';');
       List<string> FileList = new List<string>();
       foreach (string extension in extensionlist)
       {
           FileList.AddRange(System.IO.Directory.GetFiles(Directory, "*." + extension, System.IO.SearchOption.AllDirectories)); 
       }
       return FileList.ToArray();
   }
publicstaticstring[]GetFileList(字符串目录,字符串扩展名)
{
string[]extensionlist=extensions.Split(“;”);
List FileList=新列表();
foreach(extensionlist中的字符串扩展名)
{
AddRange(System.IO.Directory.GetFiles(Directory,“*.”+扩展名,System.IO.SearchOption.AllDirectories));
}
返回FileList.ToArray();
}
您可以使用LINQ:

string[] FileList =  extensions.Split(';').Distinct()
    .SelectMany(ex => System.IO.Directory.GetFiles(Directory, "*." + ex, SearchOption.AllDirectories))
    .ToArray();

如果您使用的是.NET4.5+,请尝试下面的代码,这样会得到更快的结果

public static string[] GetFileList(string Directory, string extensions)
{
    string[] extensionlist = extensions.Split(';');
    var FileList = Directory.EnumerateFiles(Directory)
        .Where(file => extensionlist.Contains(Path.GetExtension(file))).ToArray<string>();
    return FileList;
}
publicstaticstring[]GetFileList(字符串目录,字符串扩展名)
{
string[]extensionlist=extensions.Split(“;”);
var FileList=目录。枚举文件(目录)
.Where(file=>extensionlist.Contains(Path.GetExtension(file))).ToArray();
返回文件列表;
}

我没有使用ArrayList。这是一个陷阱[]你必须使用集合。数组大小是不变的,因为它不能增长。问题是,您用新的数组替换了数组引用,而它不是一个添加项。您将使用上一次迭代中的数组完成(仅包含具有上一次扩展名的文件)