如何 return 由数字文件夹名称组成的 DirectoryInfo 对象?

How do I return a DirectoryInfo object consisting of numeric folder names?

我正在尝试查询一个文件夹,并且 return 仅查询具有数字文件夹名称的文件夹。问题是我在 DirectoryInfo[] 对象中需要它。

我可以这样做(而且有效):

List<string> subDirList = Directory.GetDirectories(rootPath, "*", SearchOption.TopDirectoryOnly)
                           .Where(f => Regex.IsMatch(f, @"[\/]\d+$")).ToList();

但我真的需要这样的东西:

DirectoryInfo[] subDirs = Directory.GetDirectories(rootPath, "*", SearchOption.TopDirectoryOnly)
                                   .Where(f => Regex.IsMatch(f, @"[\/]\d+$"));

有什么建议吗?

您可以使用 .Select(..) 将其映射到 DirectoryInfo,然后使用 ToArray():

DirectoryInfo[] subDirs = Directory.GetDirectories(rootPath, "*", SearchOption.TopDirectoryOnly)
                                   .Where(f => Regex.IsMatch(f, @"[\/]\d+$"))
                                   <b>.Select(x => new DirectoryInfo(x))</b> //convert it to a DirectoryInfo
                                   <b>.ToArray()</b>; // make the result an Array

实例化 DirectoryInfo and then make your query. The method DirectoryInfo.GetDirectories 类型的对象将 return 所需的 DirectoryInfo

类型数组
DirectoryInfo dirInfo = new DirectoryInfo(yourpath);

DirectoryInfo[] subDirs = dirInfo.GetDirectories("*", SearchOption.TopDirectoryOnly)
                         .Where(f => Regex.IsMatch(f.FullName, @"[\/]\d+$")).ToArray();

编辑:

在 C# 7 中,您可以避免使用带有简单 int.TryParse:

的正则表达式
DirectoryInfo[] subDirs = dirInfo.GetDirectories("*", SearchOption.TopDirectoryOnly)
                      .Where(f => int.TryParse(f.Name, out _)).ToArray();

在 C# 7 下,您需要一个额外的 int 类型的变量作为 out