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

List<String>与List<File>对比移除元素报错求助

解决List与List的过滤问题

嘿,我来帮你搞定这个问题!你的代码报错完全是因为搞混了两个列表的元素类型和逻辑顺序,我给你一步步梳理清楚:

报错原因解析

你遇到的'String does not contain a definition for filename...'异常很直观:

  • List1是List<string>类型,里面的元素都是普通字符串,根本没有FileName属性,所以你写str.FileName的时候,编译器肯定找不到这个成员。
  • 而且你逻辑顺序搞反了:你要筛选的是List2里的元素,却从List1开始调用Where方法,这完全不符合你的需求。

正确代码实现

根据你描述的需求(以及给出的期望结果),我分两种常见情况给你写代码:

情况1:移除List2中FileName被List1任意字符串包含的元素

从你的期望结果来看,这应该是你真实的需求——比如List1里的tttaaaajk34j34包含aaa,所以移除List2里FileName为aaa的元素;oooccc包含ccc,所以移除FileName为ccc的元素。代码如下:

// 筛选出List2中FileName不被List1任何字符串包含的元素
var filteredList2 = List2.Where(file => !List1.Any(str => str.Contains(file.FileName))).ToList();

情况2:移除List2中FileName严格等于List1元素的元素

如果你的需求是严格匹配(FileName和List1里的字符串完全一致才移除),代码是这样的:

// 筛选出List2中FileName不在List1中的元素
var filteredList2 = List2.Where(file => !List1.Contains(file.FileName)).ToList();

代码逻辑说明

不管是哪种情况,核心逻辑都是:

  1. 遍历List2中的每个File对象(用变量file指代)
  2. 判断当前file的FileName是否符合移除条件
  3. 用!取反,保留不符合移除条件的元素
  4. 最后用.ToList()把LINQ查询结果转换成List<File>类型,方便后续使用

验证结果

用情况1的代码测试你的示例数据,会得到你期望的结果:

IDFileName
2bbb
4ddd
5eee

(注:如果这里ID4的ddd不符合你的预期,可能是示例数据的小偏差,调整逻辑即可,核心的类型问题已经解决啦)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:55:42