所以最近我正在做一个必须使用枚举和结构以及列表的任务。 我正要检查一些值。我尝试以多种方式使用.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");
}
}
也不介意丹麦语。
答案 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)