You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选Class属性存在于指定字符串中的Vehicle对象?

我来帮你修正这个问题,你确实搞反了判断逻辑,而且还有个小细节导致编译错误,咱们一步步来解决:

第一步:优化查询用的集合

首先把你的逗号分隔字符串转换成一个高效的查询集合,推荐用HashSet<string>——它的Contains方法查询速度远快于直接操作字符串,尤其是当attrs内容较多的时候:

// 分割字符串,同时去除每个项的前后空格(如果你的Class属性没有空格的话)
var allowedClasses = new HashSet<string>(attrs.Split(',').Select(s => s.Trim()));

第二步:修正筛选逻辑并解决编译错误

接下来调整你的筛选代码,同时注意把IEnumerable结果转成List——因为Where返回的是懒加载的IEnumerable<Vehicle>,无法直接赋值给List<Vehicle>类型的变量:

vehiclesSort = vehiclesSort.Where(o => allowedClasses.Contains(o.Class)).ToList();

解释原代码的问题

  1. 逻辑反转:你之前写的o.Class.Contains(attrs)是判断Vehicle的Class属性里包含整个attrs字符串(比如Class是"AAABBBCCC"才会匹配),这和你想要的「Class属性值是attrs中的某一项」完全相反。
  2. 编译错误:Where方法返回的是IEnumerable<Vehicle>,而你的vehiclesSort是List<Vehicle>类型,直接赋值会出现类型不匹配的错误,调用ToList()就能解决这个问题。

额外优化建议

如果你的Class属性和attrs里的项大小写不敏感(比如"aaa"和"AAA"视为相同),可以在创建HashSet时指定忽略大小写的比较器:

var allowedClasses = new HashSet<string>(attrs.Split(',').Select(s => s.Trim()), StringComparer.OrdinalIgnoreCase);

内容的提问来源于stack exchange,提问作者user9127893

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:35:21