2013-03-01 4 views
14

このエラーは、 'CarBootSale.CarBootSaleList'に 'GetEnumerator'のパブリック定義が含まれていないため、 'CarBootSale.CarBootSaleList'型の変数に対してforeach文を操作できないことを示しています。C#で作成しているWindowsフォームアプリケーションに問題があります。GetEnumeratorのパブリック定義がForeachステートメントに含まれていません。

私はこれを引き起こしていることを理解できないようです。

これはエラー投げているコードです:

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

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

をして、これはGetEnumeratorメソッドの定義がないと言っていますCarBootSaleListクラスです:

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

foreach(CarBootSaleList c in Sortcarboot) – Phil

+0

ここに回答があります(foreachの実装):http://stackoverflow.com/questions/10929586/what-is-the-difference-between-for-and-foreach/14812801#14812801 – polkduran

+0

この2行は関連していますか?リスト Sortcarboot =新しいリスト(); foreach(carBootSaleList内のCarBootSale c) –

答えて

0

あなたが実装する必要があります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

をサブクラス化する方が簡単でしょうか?

19

CarBootSaleListクラスはリストではありません。それはリストを含むクラスです。

あなたは3つのオプションがあります。

をごCarBootSaleListオブジェクトは、あなたが怠惰であれば、これはほとんど可能性あなたCarBootSaleListがList<CarBootSale>

または

から継承させるIEnumerable

または

を実装してください余分なコーディングなしで同じことをする

List<List<CarBootSale>> 
+6

あなたは本当に著者に 'CarBootSales'の' List'を含む 'List'を使うことを提案しましたか?最初の2つのオプションだけが実際に実際に行う意味があります。 –

+0

あなたは兄弟を揺する....これは私のために働いた –

13

carBootSaleListという宣言は表示されません。しかし、例外メッセージからは、タイプがCarBootSaleListであることがわかります。このタイプはIEnumerableインターフェイスを実装していないため、foreachでは使用できません。

あなたCarBootSaleListクラスはIEnumerable<CarBootSale>を実装する必要があります。代わりにcarBootSaleListのforeachループで

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

    ... 

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

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

はcarBootSaleList.dataを使用しています。

おそらくもう答えは必要ないかもしれませんが、誰かを助けるかもしれません。

+0

シンプルです。 – Zeek

関連する問題