26

C#で構築しているWindowsフォームアプリケーションに問題があります。エラーは、「「CarBootSale.CarBootSaleList」に「GetEnumerator」のパブリック定義が含まれていないため、foreachステートメントは「CarBootSale.CarBootSaleList」タイプの変数を操作できません」と述べています。

何が原因なのか理解できないようです。

これはエラーをスローしているコードです:

        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;
    }
4

4 に答える 4

22

あなたのCarBootSaleListクラスはリストではありません。リストを含むクラスです。

次の 3 つのオプションがあります。

オブジェクトをCarBootSaleList実装するIEnumerable

また

CarBootSaleList を継承させるList<CarBootSale>

また

あなたが怠け者なら、これは余分なコーディングなしでほとんど同じことをすることができます

List<List<CarBootSale>>
于 2013-03-01T13:41:58.997 に答える
18

の宣言は表示されません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();
    }
}
于 2013-03-01T13:46:31.523 に答える
4

使用する代わりにforeachループ内。carBootSaleListcarBootSaleList.data

おそらくもう回答は必要ありませんが、誰かの役に立ちます。

于 2014-12-29T21:31:07.040 に答える
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

リストをネストしているように、コードも少し奇妙に思えますか?

于 2013-03-01T13:41:48.487 に答える