【问题标题】:Linq Not Working on a List of StringsLinq 无法处理字符串列表
【发布时间】:2017-06-06 08:47:03
【问题描述】:

我正在尝试从目录中获取包含文件路径的字符串列表。用户将以逗号分隔格式指定文件扩展名,例如"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 个结果的列表。我知道拆分功能似乎没有提供后续扩展,但它工作正常。我也尝试使用. 指定扩展名,但没有成功。

注意:我不想在目录中多次搜索。

【问题讨论】:

    标签: c# linq system.io.directory


    【解决方案1】:

    您在第二个扩展程序的开头和后面的任何内容(索引 > 0)处都有一个额外的空间。

    只需修剪一下:

    f.EndsWith(Extension.Trim());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-26
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 2020-02-13
      • 2016-06-24
      相关资源
      最近更新 更多