簡體   English   中英

列表<struct> .包含</struct>

[英]List<Struct> .Contains

所以最近我正在做一項任務,我必須使用枚舉和結構,還有列表。 我正處於必須檢查某些值的地步。 盡管我還沒有找到一個好的解決方案,但我已經嘗試了很多方式 using.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");
        }
    }

也不要介意它是丹麥語的語言。

Contains方法不能以這種方式工作,您需要傳遞T類型的實例(在您的情況下為FoodItem

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

但是這個檢查沒有意義。 您正在獲取列表並對其進行迭代,所有項目都已在列表中,您的條件始終為true

也許您需要在循環之外傳遞數字,而不是在列表中找到它,例如使用Any方法,例如

if (Food().Any(f => f.number == numberToFind))
{
}

您的代碼段中的food1是循環變量,不要在比較中使用它,結果將始終為true

您可以嘗試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}");

你應該使用

FoodL().Contains(food1)

不是

FoodL().Contains(food1.number)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM