如何在while判断条件中包含listOfObjectDishes列表全部13个索引的Dish比较
首先修正原有逻辑错误
你原有代码使用||(逻辑或)拼接条件存在严重问题:只要任意一个selectedDish != xxxx的判断成立,整个条件就为真。而selectedDish不可能同时等于所有13个菜品的Dish值,所以哪怕你手动补全13个索引的判断,这个条件永远为真,会直接进入死循环。
你实际要实现的逻辑应该是:当selectedDish不存在于列表所有Dish值中时,继续循环,有以下两种常用实现方案:
方案1:使用LINQ(最简洁,推荐)
首先引入LINQ命名空间:
using System.Linq;
直接替换原有while条件即可,适配任意长度的列表,后续列表元素数量变动无需修改代码:
// 语义更直观:selectedDish 不在所有Dish的ToString结果集合中时继续循环 while (!listOfObjectDishes.Select(d => d.Dish.ToString()).Contains(selectedDish)) { // 原有循环逻辑 }
和上面写法完全等价的另一种写法:
// 所有Dish的ToString结果都不等于selectedDish时继续循环 while (listOfObjectDishes.All(d => selectedDish != d.Dish.ToString())) { // 原有循环逻辑 }
方案2:不使用LINQ,手动封装判断方法
如果环境不允许使用LINQ,可以自己封装遍历判断逻辑:
// 先封装判断方法,DishObject替换为你listOfObjectDishes的元素类型 private bool CheckDishExists(string selectedDish, List<DishObject> dishList) { foreach (var item in dishList) { if (item.Dish.ToString() == selectedDish) { return true; } } return false; } // 循环处调用 while (!CheckDishExists(selectedDish, listOfObjectDishes)) { // 原有循环逻辑 }
内容的提问来源于stack exchange,提问作者Slide
相关产品推荐
相关产品推荐

