【问题标题】:while statement which will include all indexes of the listwhile 语句将包含列表的所有索引
【发布时间】:2021-12-13 12:01:24
【问题描述】:

我有这样的while语句

while (selectedDish != listOfObjectDishes[0].Dish.ToString()
    || selectedDish != listOfObjectDishes[1].Dish.ToString()
    || selectedDish != listOfObjectDishes[2].Dish.ToString())
{}

该列表有 13 个索引,我想将它们全部包括在内(列表的每个索引)我怎样才能做到正确?

【问题讨论】:

  • 您使用哪种语言?大多数语言都有一些函数来检查数组是否包含特定值。
  • c# ,不好意思忘了说
  • 我有不同的类型(列表是我自己的类的类型)所以我不能使用包含,因为我有一个例外,它不能从字符串转换为我自己的类。我认为有一种最简单的方法可以将它包含在索引中。某种范围,而不是在 While 循环中多次播放“或”
  • 您可以使用.Any() Linq 方法查询所有.Dish 值:while (listOfObjectDishes.Any(x => x.Dish.ToString() != selectedDish)){ }
  • 是的,它的工作 - 谢谢!

标签: c# while-loop


【解决方案1】:

我认为最简单的方法是使用 linq 库的扩展方法 any() 来检查您的列表。

using System;
using System.Linq;
using System.Collections.Generic;
                    
public class Program {
    public static void Main() {

        List<Dish> listOfObjectDishes = new List<Dish>();
        listOfObjectDishes.Add(new Dish("a"));
        listOfObjectDishes.Add(new Dish("b"));
        listOfObjectDishes.Add(new Dish("c"));
        
        while(listOfObjectDishes.Any(dish => dish.ToString() == "b")) {
            Console.WriteLine("Removing: " + listOfObjectDishes[0].ToString());
            listOfObjectDishes.RemoveAt(0);
        }
    }
}

public class Dish
{
    private string name =  string.Empty;
    public Dish(string name) {
        this.name = name;
    }
    
    public override string ToString() {
        return name;    
    }
}

【讨论】:

  • 谢谢 :) 使用 any() 我已经实现了我想要的
  • @Slide 很高兴我能帮上忙,请接受这个答案(左侧的复选标记),以便其他人知道您不需要进一步的帮助。
猜你喜欢
  • 1970-01-01
  • 2017-10-04
  • 2013-08-12
  • 2017-11-19
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 2011-06-21
相关资源
最近更新 更多