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

Trying to add files that contain .stl to a list using 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>'

有人能帮帮我吗?

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

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

你需要:

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

您放错了 ()。这导致了字符串和字符列表之间的比较,因为 <string>.ToList 将 return 和 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 比较中使用它。