Linq 不处理字符串列表
Linq Not Working on a List of Strings
我正在尝试从目录中获取包含文件路径的字符串列表。用户将以逗号分隔格式指定文件扩展名,例如 "gif, jpg"
。
这是我的代码。
private static List<string> GetFiles(string DirectoryPath, string Extensions)
{
List<string> FilePaths = new List<string>();
if (Directory.Exists(DirectoryPath))
{
//Calling this line more than once is not allowed.
List<string> AllFiles = Directory.EnumerateFiles(DirectoryPath, "*.*", SearchOption.AllDirectories).ToList();
if (!string.IsNullOrEmpty(Extensions) && !string.IsNullOrWhiteSpace(Extensions))
{
foreach (string Extension in Extensions.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries))
{
List<string> SearchedFiles = AllFiles.Where(f => f.EndsWith(Extension)).ToList();
FilePaths.AddRange(SearchedFiles);
}
}
else FilePaths.AddRange(AllFiles);
}
return FilePaths;
}
该代码工作正常,但它只检索第一个扩展的结果,而不会检索下一个后续扩展的结果。它只是忽略 foreach 循环内第一行中指定的 Linq,它初始化 SearchedFiles 等于一个包含 0 个结果的列表。我知道拆分功能似乎没有提供后续扩展,但它工作正常。我也尝试使用 .
指定扩展名,但没有成功。
注意:我不想多次在目录内搜索。
您在第二个扩展的开头以及后面的内容(索引 > 0)有一个额外的 space。
只需trim即:
f.EndsWith(Extension.Trim());
我正在尝试从目录中获取包含文件路径的字符串列表。用户将以逗号分隔格式指定文件扩展名,例如 "gif, jpg"
。
这是我的代码。
private static List<string> GetFiles(string DirectoryPath, string Extensions)
{
List<string> FilePaths = new List<string>();
if (Directory.Exists(DirectoryPath))
{
//Calling this line more than once is not allowed.
List<string> AllFiles = Directory.EnumerateFiles(DirectoryPath, "*.*", SearchOption.AllDirectories).ToList();
if (!string.IsNullOrEmpty(Extensions) && !string.IsNullOrWhiteSpace(Extensions))
{
foreach (string Extension in Extensions.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries))
{
List<string> SearchedFiles = AllFiles.Where(f => f.EndsWith(Extension)).ToList();
FilePaths.AddRange(SearchedFiles);
}
}
else FilePaths.AddRange(AllFiles);
}
return FilePaths;
}
该代码工作正常,但它只检索第一个扩展的结果,而不会检索下一个后续扩展的结果。它只是忽略 foreach 循环内第一行中指定的 Linq,它初始化 SearchedFiles 等于一个包含 0 个结果的列表。我知道拆分功能似乎没有提供后续扩展,但它工作正常。我也尝试使用 .
指定扩展名,但没有成功。
注意:我不想多次在目录内搜索。
您在第二个扩展的开头以及后面的内容(索引 > 0)有一个额外的 space。
只需trim即:
f.EndsWith(Extension.Trim());