【发布时间】:2014-08-19 20:01:07
【问题描述】:
尝试收集一系列符合特定条件的文件名,然后将该集合传递给用户以选择正确的文件名。这样做没问题,除非我尝试实际访问所选的特定文件。
string URL = "whateverPath";
string filename = "whateverFileName";
string pattern = @"\\" + filename + @"N?\..{3}";
IEnumerable<string> files = Directory.EnumerateFiles(URL).
Where(path => Regex.Match(path, pattern, RegexOptions.IgnoreCase).Success);
这给了我一个文件集合,但我不能选择文件[2],例如,因为 IEnumerable 的构造方式(谁听说过索引无法访问的枚举?- - 有点让它......不可枚举!)
所以,当我尝试使用返回字符串数组的 Directory.GetFiles 方法时,突然不允许我使用 Linq 模式匹配快捷方式,因为它只返回一个 IEnumerable。
string[] files = Directory.GetFiles(URL).
Where(path => Regex.Match(path, pattern, RegexOptions.IgnoreCase).Success);
这不会编译。
有什么简单的方法可以从 IEnumerable 中获取索引号,或者使用 Linq 来匹配我的模式?
【问题讨论】:
-
如果你在它的末尾加上一个
ToArray(),你可以这样索引它。 -
@paqogomez - 这应该是答案,而不是评论。
-
做到了。感谢您指出一个非常简单的解决方案!
-
@ErikPhilips:我不会推荐
ElementAt(),除非你知道你只想要一个元素。与多次重新评估可枚举的风险相比,创建列表的开销通常微不足道。