首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >List<Struct> .Contains

List<Struct> .Contains
EN

Stack Overflow用户
提问于 2019-11-22 11:18:40
回答 3查看 385关注 0票数 0

所以最近我做了一个任务,我必须使用枚举和结构,也列出。我到了要检查一些价值的时候了。虽然我还没有找到一个好的解决方案,但我尝试过以多种方式使用.Contains。有没有可能在结构上使用.Contains,或者我必须重做什么?

守则第1部分:

代码语言:javascript
运行
复制
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部分:

代码语言:javascript
运行
复制
public struct FoodItem
{
    public string name;
    public double price;
    public int number;
}

守则第3部分:

代码语言:javascript
运行
复制
    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");
        }
    }

也不要介意它是丹麦语的语言。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-22 11:24:43

您可以尝试Any而不是Contains:如果FoodL()Any项,那么item.number等于food1.number

代码语言:javascript
运行
复制
 using System.Linq;

 ...

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

或者,您可以在Where的帮助下过滤这些项:FoodL()中的所有项,使item.number等于某个值(设为numberToFind)

代码语言:javascript
运行
复制
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}");
票数 4
EN

Stack Overflow用户

发布于 2019-11-22 11:24:13

Contains方法不是这样工作的,您需要传递一个T类型的实例(在您的例子中是FoodItem)

代码语言:javascript
运行
复制
if (FoodL().Contains(food1))
{
    Console.WriteLine("Jeg har nummer 1");
}

但这张支票没什么意义。您正在获取列表并对其进行迭代,列表中的所有项,您的条件总是true

也许您需要在循环之外传递数字,而不是在列表中找到它,例如使用Any方法,例如

代码语言:javascript
运行
复制
if (Food().Any(f => f.number == numberToFind))
{
}

代码片段中的food1是循环变量,不要比较使用它,结果总是true

票数 4
EN

Stack Overflow用户

发布于 2019-11-22 11:25:55

你应该使用

代码语言:javascript
运行
复制
FoodL().Contains(food1)

代码语言:javascript
运行
复制
FoodL().Contains(food1.number)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58993174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档