List <Struct>。包含

时间:2019-11-22 11:18:40

标签: c#

所以最近我正在做一个必须使用枚举和结构以及列表的任务。 我正要检查一些值。我尝试以多种方式使用.Contains,尽管我没有找到好的解决方案。 有没有可能使用的方法。包含在结构上还是我必须重做一些事情?

代码的第1部分:

public static List<FoodItem> FoodL()
{
    List<FoodItem> FoodL = new List<FoodItem>();
    FoodItem food1 = new FoodItem();
    FoodItem food2 = new FoodItem();
    FoodItem food3 = new FoodItem();

    food1.name = "Burger";
    food1.price = 33;
    food1.number = 1;
    FoodL.Add(food1);

    food2.name = "Pizza";
    food2.price = 65;
    food2.number = 2;
    FoodL.Add(food2);

    food3.name = "Fritter";
    food3.price = 20;
    food3.number = 3;
    FoodL.Add(food3);

    return FoodL;
}

代码的第二部分:

public struct FoodItem
{
    public string name;
    public double price;
    public int number;
}

代码的第3部分:

    foreach (FoodItem food1 in FoodL())
    {
        Console.WriteLine("Nr. {0} {1}  {2:c}", food1.number, food1.name, food1.price);
        if (FoodL().Contains(food1.number))
        {
            Console.WriteLine("Jeg har nummer 1");
        }
    }

也不介意丹麦语。

3 个答案:

答案 0 :(得分:4)

Contains方法在这种级别上不起作用,您需要传递类型为T(在您的情况下为FoodItem)的对象

if (FoodL().Contains(food1))
{
    Console.WriteLine("Jeg har nummer 1");
}

但是此检查没有意义。您正在获取列表并对其进行遍历,列表中已存在所有项目,您的条件始终为true。也许您需要将数字传递到循环外,而不是在列表中找到它,例如使用Any方法,例如

if (Food().Any(_ => _.number == numberToFind))
{
}
您的代码段中的

food1是循环变量,请勿在比较中使用它,结果始终为true

答案 1 :(得分:4)

您可以尝试使用Any而不是Contains:如果FoodL()具有Any项,使得item.number等于food1.number

 using System.Linq;

 ...

 if (FoodL().Any(item => item.number == food1.number)) {
   ...
 }

或者您可以在Where的帮助下过滤FoodL()中的所有项目,使得item.number等于某个值(将其设为{ {1}})

numberToFind

答案 2 :(得分:2)

您应该使用

FoodL().Contains(food1)

不是

FoodL().Contains(food1.number)