2013-03-01 18 views
14

Ich habe ein Problem mit einer Windows Form-Anwendung, die ich in C# erstellen. Der Fehler besagt, dass foreach-Anweisung nicht auf Variablen vom Typ "CarBootSale.CarBootSaleList" angewendet werden kann, da "CarBootSale.CarBootSaleList" keine öffentliche Definition für "GetEnumerator" enthält.C# Foreach-Anweisung enthält keine öffentliche Definition für GetEnumerator

Ich kann nicht zu verstehen scheinen, was das verursacht.

Dies ist der Code, der den Fehler werfen wird:

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

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

und dies ist die CarBootSaleList Klasse, wo sie es sagt kein GetEnumerator Definition lautet:

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

Sie hier eine Antwort finden kann (Umsetzung von foreach): http://stackoverflow.com/questions/10929586/what-is-the-difference-between-for-and-foreach/14812801 # 14812801 – polkduran

+0

Sind diese beiden Zeilen verwandt?Liste Sortcarboot = neue Liste (); foreach (CarBootSale c in der carBootSaleList) –

Antwort

19

Ihre CarBootSaleList Klasse ist keine Liste. Es ist eine Klasse, die eine Liste enthält.

Sie haben drei Möglichkeiten:

Machen Sie Ihre CarBootSaleList Objekt IEnumerable

oder

Ihre CarBootSaleList von List<CarBootSale>

oder

erben machen implementieren, wenn Sie faul sind, könnte dies fast Tun Sie dasselbe ohne zusätzliche Codierung

List<List<CarBootSale>> 
+6

Haben Sie dem Autor wirklich nur vorgeschlagen, eine 'Liste' zu ​​verwenden, die eine' Liste' von 'CarBootSales' enthält? Nur die ersten beiden Optionen machen eigentlich Sinn. –

+0

Sie rockt Bruder .... Das hat für mich funktioniert –

13

Sie zeigen uns nicht die Deklaration carBootSaleList. Aber von der Ausnahmemeldung kann ich sehen, dass es vom Typ CarBootSaleList ist. Dieser Typ implementiert die Schnittstelle IEnumerable nicht und kann daher nicht in einer Foreach verwendet werden.

Ihre CarBootSaleList Klasse sollte IEnumerable<CarBootSale> implementieren:

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

    ... 

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

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

In foreach-Schleife statt carBootSaleList carBootSaleList.data verwenden.

Sie brauchen wahrscheinlich keine Antwort mehr, aber es könnte jemandem helfen.

+0

Einfach ist gut. – Zeek

Verwandte Themen