簡體   English   中英

檢查主C#中的類列表

[英]Check the list of class in main c#

該程序有2個類:

ItemUtility類:

public class ItemUtility
{
    public ItemUtility(int item, int utility)
    {
        this.item = item;
        this.utility = utility;
    }

    public int item { get; set; }
    public int utility { get; set; }
}

TransactionTP類:

public class TransactionTP
{
    protected List<ItemUtility> itemsUtilities { get; set; }
    protected int transactionUtility { get; set; }
    public TransactionTP(List<ItemUtility> itemsUtilities, int transactionUtility)
    {
        this.itemsUtilities = itemsUtilities;
        this.transactionUtility = transactionUtility;
    }
}

我們定義了一個列表( List<TransactionTP> transactions ),並將值分配給此集合

在此處輸入圖片說明

使用下面的命令,我得到第一行

    foreach (TransactionTP b in matrix)
{
    matrix[b];
}

如何獲得第一筆交易第一行的項目和效用?

根據照片:

214 + 260 + ...

846 + 552 + ...

我嘗試了以下過程,但這是一個錯誤:

matrix[a].itemsUtilities[b]

matrixTransactionTP的列表,因此當您進行foreach時,您將枚舉列表項。 這是應該起作用的方法:

foreach (TransactionTP b in matrix)
{
    if(b.itemsUtilities.Count > 0)
    {
        // Do something with item / utility...
        b.itemsUtilities[0].item
        b.itemsUtilities[0].utility
    }
}

如果只需要第一個事務和第一個itemUtilities,則只需使用索引器即可訪問它: matrix[0].itemsUtilities[0].item

根據照片:

214 + 260 + ...

846 + 552 + ...

我想你要遍歷嵌套列表,總結了item

首先,您需要將您的屬性public (請參閱公共,私有,受保護和沒有訪問修飾符之間有什么區別?

public class TransactionTP
{
    public List<ItemUtility> itemsUtilities { get; set; }
    public  int transactionUtility { get; set; }
    public TransactionTP(List<ItemUtility> itemsUtilities, int transactionUtility)
    {
        this.itemsUtilities = itemsUtilities;
        this.transactionUtility = transactionUtility;
    }
}

然后,您可以執行以下操作:

foreach (TransactionTP b in matrix)
{
    int itemCount = 0;
    //remember to null check to be defensive
    if (b.itemsUtilities != null)
    {
        foreach(ItemUtility c in b.itemsUtilities)
        {
            itemCount += c.item;
        }
    }
    //presuming this is an console app?
    Console.Write(itemCount);
}

您也可以使用LINQ執行此操作:

foreach (TransactionTP b in matrix)
{
    int itemCount = 0;
    //remember to null check to be defensive
    if (b.itemsUtilities != null)
    {
        itemCount = b.itemsUtilities.Sum(s => s.item);
    }
    //presuming this is an console app?
    Console.Write(itemCount);
}

請參考本教程,了解foreach的工作原理: https//www.dotnetperls.com/foreach

基本上,一個foreach遍歷一個項目列表,在您的示例中, bb是該項目及其matrix的項目列表。

因此,如果您將代碼更改為

foreach(var b in matrix)
{
    Console.WriteLine(b.transactionUtility);
}

然后,您可以看到每個b.transactionUtility是什么。

暫無
暫無

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

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