簡體   English   中英

C# Foreach 語句不包含 GetEnumerator 的公共定義

[英]C# Foreach statement does not contain public definition for GetEnumerator

我在使用 C# 構建的 Windows 窗體應用程序時遇到問題。 錯誤指出“foreach 語句不能對類型為‘CarBootSale.CarBootSaleList’的變量進行操作,因為‘CarBootSale.CarBootSaleList’不包含‘GetEnumerator’的公共定義”。

我似乎無法理解是什么導致了這種情況。

這是引發錯誤的代碼:

        List<CarBootSaleList> Sortcarboot = new List<CarBootSaleList>();

        foreach (CarBootSale c in carBootSaleList)
        {
            if (c.Charity == "N/A")
            {
                Sortcarboot.Add(carBootSaleList);
                textReportGenerator.GenerateAllReport(Sortcarboot, AppData.CHARITY);
            }
        }

這是 CarBootSaleList 類,它說沒有 GetEnumerator 定義:

public class CarBootSaleList
{

    private List<CarBootSale> carbootsales;

    public CarBootSaleList()
    {
        carbootsales = new List<CarBootSale>();
    }

    public bool AddCarBootSale(CarBootSale carbootsale)
    {
        bool success = true;
        foreach (CarBootSale cbs in carbootsales)
        {
            if (cbs.ID == carbootsale.ID)
            {
                success = false;
            }
        }
        if (success)
        {
            carbootsales.Add(carbootsale);
        }
        return success;
    }

    public void DeleteCarBootSale(CarBootSale carbootsale)
    {
        carbootsales.Remove(carbootsale);
    }

    public int GetListSize()
    {
        return carbootsales.Count();
    }

    public List<CarBootSale> ReturnList()
    {
        return carbootsales;
    }

    public string Display()
    {
        string msg = "";

        foreach (CarBootSale cbs in carbootsales)
        {
            msg += String.Format("{0}  {1}", cbs.ID, cbs.Location, cbs.Date);
            msg += Environment.NewLine;
        }
        return msg;
    }

您的CarBootSaleList類不是列表。 它是一個包含列表的類。

您有三個選擇:

使您的CarBootSaleList對象實現IEnumerable

要么

使您的 CarBootSaleList 從List<CarBootSale>繼承

要么

如果你很懶,這幾乎可以做同樣的事情而無需額外的編碼

List<List<CarBootSale>>

您沒有向我們展示carBootSaleList的聲明。 但是,從異常消息中我可以看到它的類型為CarBootSaleList 此類型不實現IEnumerable接口,因此不能在 foreach 中使用。

您的CarBootSaleList類應該實現IEnumerable<CarBootSale>

public class CarBootSaleList : IEnumerable<CarBootSale>
{
    private List<CarBootSale> carbootsales;

    ...

    public IEnumerator<CarBootSale> GetEnumerator()
    {
        return carbootsales.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return carbootsales.GetEnumerator();
    }
}

foreach循環而不是carBootSaleList使用carBootSaleList.data

您可能不再需要答案,但它可以幫助某人。

您應該實現 IEnumerable 接口(CarBootSaleList 應該在您的情況下實現它)。

http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.getenumerator.aspx

但通常更容易繼承 System.Collections.ObjectModel.Collection 和朋友

http://msdn.microsoft.com/en-us/library/system.collections.objectmodel.aspx

您的代碼似乎也有點奇怪,就像您在嵌套列表一樣?

暫無
暫無

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

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