所以最近我做了一个任务,我必须使用枚举和结构,也列出。我到了要检查一些价值的时候了。虽然我还没有找到一个好的解决方案,但我尝试过以多种方式使用.Contains。有没有可能在结构上使用.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;
}
守则第2部分:
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");
}
}
也不要介意它是丹麦语的语言。
发布于 2019-11-22 11:24:43
您可以尝试Any
而不是Contains
:如果FoodL()
有Any
项,那么item.number
等于food1.number
using System.Linq;
...
if (FoodL().Any(item => item.number == food1.number)) {
...
}
或者,您可以在Where
的帮助下过滤这些项:FoodL()
中的所有项,使item.number
等于某个值(设为numberToFind
)
var result = FoodL()
.Where(item => item.number == numberToFind);
foreach (FoodItem found in result)
Console.WriteLine($"{found.number} {found.name} {found.price:c} har nummer {numberToFind}");
发布于 2019-11-22 11:24:13
Contains
方法不是这样工作的,您需要传递一个T
类型的实例(在您的例子中是FoodItem
)
if (FoodL().Contains(food1))
{
Console.WriteLine("Jeg har nummer 1");
}
但这张支票没什么意义。您正在获取列表并对其进行迭代,列表中的所有项,您的条件总是true
。
也许您需要在循环之外传递数字,而不是在列表中找到它,例如使用Any
方法,例如
if (Food().Any(f => f.number == numberToFind))
{
}
代码片段中的food1
是循环变量,不要比较使用它,结果总是true
。
发布于 2019-11-22 11:25:55
你应该使用
FoodL().Contains(food1)
不
FoodL().Contains(food1.number)
https://stackoverflow.com/questions/58993174
复制相似问题