在存储Numbers类对象的列表中查找Integer类对象并执行操作的问题
问题根因
你编写的代码存在两个核心问题:
- 无论第一个元素的判断结果如何,两个分支都执行了
break直接终止循环,因此只会检查列表第一个元素,不会遍历后续内容 foreach遍历集合过程中直接调用Remove修改集合,会触发InvalidOperationException运行时异常,就算第一个元素是Integer也无法正常完成删除操作
可行实现方案
方案1:使用LINQ实现(代码最简洁)
如果需要移除所有Integer类型元素:
// 先判断列表中是否存在Integer类型 if (!nList.Any(n => n.Type == "Integer")) { Console.WriteLine("There are no integers in the list."); } else { nList.RemoveAll(n => n.Type == "Integer"); }
如果仅需要移除第一个找到的Integer类型元素:
var firstInteger = nList.FirstOrDefault(n => n.Type == "Integer"); if (firstInteger == null) { Console.WriteLine("There are no integers in the list."); } else { nList.Remove(firstInteger); }
方案2:使用普通for循环实现(无需引入LINQ)
bool foundInteger = false; // 倒序遍历避免删除元素后出现索引错位问题 for (int i = nList.Count - 1; i >= 0; i--) { if (nList[i].Type == "Integer") { nList.RemoveAt(i); foundInteger = true; // 如果只删除第一个Integer,保留下面的break;要删除所有则删除break即可 break; } } if (!foundInteger) { Console.WriteLine("There are no integers in the list."); }
内容的提问来源于stack exchange,提问作者Kelven Lim
相关产品推荐
相关产品推荐

