基于条件移除列表元素报错:无法将void转换为特定列表模型
问题分析与解决
错误原因
你写的代码报错是因为两个核心问题:
List<T>.ForEach()方法的返回值是void,而List<T>.Remove()需要传入一个列表对应的实体对象,类型完全不匹配,导致转换错误。Remove()本身只能删除单个元素,但你要处理的是批量删除符合条件的元素,用这个方法根本不适用。
正确写法
根据你的需求,分两种场景给出解决方案:
场景1:先标记元素,再移除
如果你需要先把符合条件的元素标记为isRestrictedpri = true,再移除这些元素,这么写:
// 1. 标记符合条件的元素 skillResult.Where(search => resrictedskills.Any(resrictedskill => search.L5_Id.ToString() == resrictedskill.CRTS_SKILLID.ToString() && resrictedskill.CRTS_SKILLTYPE.ToLower() == "primary" ) ).ToList() .ForEach(skill => skill.isRestrictedpri = true); // 2. 移除所有标记过的元素 skillResult.RemoveAll(skill => skill.isRestrictedpri);
场景2:直接移除符合条件的元素
如果不需要标记,只想直接删除符合条件的元素,用RemoveAll()一步搞定:
skillResult.RemoveAll(search => resrictedskills.Any(resrictedskill => search.L5_Id.ToString() == resrictedskill.CRTS_SKILLID.ToString() && resrictedskill.CRTS_SKILLTYPE.ToLower() == "primary" ) );
补充说明
RemoveAll()是List集合专门用来批量删除元素的方法,它接受一个判断条件(谓词),会自动遍历集合并删除所有符合条件的元素,比手动遍历删除更高效也更安全(避免操作索引时的越界问题)。
内容的提问来源于stack exchange,提问作者kang_mi_rae
相关产品推荐
相关产品推荐

