C#Foreach语句不包含GetEnumerator的公共定义

Dan*_*nny 22 c# public definition enumerator

我正在使用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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

这是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;
    }
Run Code Online (Sandbox Code Playgroud)

Gui*_*ish 22

你的CarBootSaleList班级不是名单.它是一个包含列表的类.

你有三个选择:

让你的CarBootSaleList对象实现IEnumerable

要么

让你的CarBootSaleList继承自 List<CarBootSale>

要么

如果你很懒,这几乎可以做同样的事情而无需额外的编码

List<List<CarBootSale>>
Run Code Online (Sandbox Code Playgroud)

  • 您是否真的建议作者使用包含`CarBootSales`的`List`的`List`?实际上只有前两个选项才有意义. (6认同)

pes*_*ino 15

你没有告诉我们声明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();
    }
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*tra 5

foreach循环中而不是carBootSaleList使用carBootSaleList.data.

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


Gru*_*l3r 1

您应该实现 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

你的代码也看起来有点奇怪,就像你在嵌套列表一样?