尝试使用 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
比较中使用它。
我有一个 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
比较中使用它。