尝试使用linq将包含.stl的文件添加到列表中

时间:2015-02-05 15:42:09

标签: c# linq

我有一个ZipArchive,里面有一堆文件。我试图获取所有文件格式为.stl的文件,但我似乎无法正确使用。

这就是我所拥有的:

var scan = import.ZipFile.Entries.Any(e => e.Name == string.Format("*.stl").ToList());

我确信我错过了一些愚蠢的东西,但我不断收到错误:

operator '==' cannot be applied to operands of type 'string' and 
'system.collections.generic.list<char>'

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

Any返回一个布尔值 - 我想你想得到所有项目的列表?

var scan = import.ZipFile.Entries.Where(e => e.Name.EndsWith(".stl", StringComparison.InvariantCultureIgnoreCase)).ToList();

答案 1 :(得分:1)

你需要:

var scan = import.ZipFile.Entries
                    .Where(e => Path.GetExtension(e.Name).Equals(".stl", StringComparison.InvariantCultureIgnoreCase))
                    .ToList();

你错放了()。这导致字符串与字符列表之间的比较,<string>.ToList将返回List<char>。它可能是:

var scan = import.ZipFile.Entries.Any(e => e.Name == string.Format("*.stl")).ToList();

但是你会得到一个List<bool>,你需要Enumerable.Where条款。

更重要的是,您的比较e.Name == string.Format("*.stl")将无效。您需要比较扩展名,使用Path.GetExtension方法。您的比较是使用Directory.GetFiles或命令提示符使用的通配符,但您不能在C#中使用string比较时使用它。