如何从<string, List<Fruit>>类型字典中删除指定元素并解决CS1503报错
问题解决方法
错误触发原因
- 类型不匹配:
List<Fruit>的Remove()方法要求传入Fruit类的实例,你传入的是string类型的水果名称,类型不一致直接触发CS1503编译错误。 - 遍历逻辑错误:你在通过
foreach遍历List<Fruit>的同时修改列表,就算修复类型问题,运行时也会抛出集合被修改的枚举异常。 - 语法逻辑错误:内层遍历得到的
k是单个Fruit对象,不存在k.Value属性,你实际要操作的是外层字典值对应的i.Value水果列表。
最优实现代码
直接使用RemoveAll方法批量匹配删除,不需要手动遍历列表:
foreach(var dicItem in fruitDic) { dicItem.Value.RemoveAll(f => f.Name == fruitName); }
如果你需要先筛选再逐个删除,要先把待删除的对象提取到独立列表,避免枚举原列表的同时修改原列表:
foreach(var dicItem in fruitDic) { var toRemoveFruits = dicItem.Value.Where(f => f.Name == fruitName).ToList(); foreach(var fruit in toRemoveFruits) { dicItem.Value.Remove(fruit); } }
内容的提问来源于stack exchange,提问作者saghar francis
相关产品推荐
相关产品推荐

