2013-03-01 10 views
14

Mam problem z aplikacją Windows Form, którą buduję w C#. Błąd polega na tym, że "instrukcja foreach nie może działać na zmiennych typu" CarBootSale.CarBootSaleList ", ponieważ" CarBootSale.CarBootSaleList "nie zawiera publicznej definicji" GetEnumerator ".C# Foreach nie zawiera publicznej definicji GetEnumerator

Nie mogę zrozumieć, co to powoduje.

Jest to kod, który rzuca się błąd:

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

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

i jest to klasa CarBootSaleList gdzie ona mówi, że nie jest to definicja 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

foreach (CarBootSaleList c w Sortcarboot) – Phil

+0

możesz znaleźć odpowiedź tutaj (implementacja foreach): http://stackoverflow.com/questions/10929586/what-is-the-difference-between-for-and-foreach/14812801 # 14812801 – polkduran

+0

Czy te dwie linie są powiązane?Lista Sortcarboot = nowa lista (); foreach (CarBootSale c w carBootSaleList) –

Odpowiedz

19

Twoja klasa CarBootSaleList nie jest listą. Jest to klasa, która zawiera listę.

Masz trzy opcje:

Sprawdź swój przedmiot CarBootSaleList wdrożyć IEnumerable

lub

dokonać CarBootSaleList dziedziczą List<CarBootSale>

lub

jeśli jesteś leniwy to dało prawie zrób to samo bez dodatkowego kodowania

List<List<CarBootSale>> 
+6

Czy naprawdę zaproponowałeś autorowi użycie 'Listy', która zawiera' List' '' CarBootSales'? Tylko pierwsze dwie opcje rzeczywiście mają sens. –

+0

Kołyszesz brata .... To zadziałało dla mnie –

13

Nie pokazujesz nam deklaracji carBootSaleList. Jednak z komunikatu o wyjątku widzę, że jest on typu CarBootSaleList. Ten typ nie implementuje interfejsu IEnumerable i dlatego nie może być używany w foreach.

Twoja klasa CarBootSaleList powinny wdrożyć IEnumerable<CarBootSale>:

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

    ... 

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

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

W pętli foreach zamiast carBootSaleList używać carBootSaleList.data.

Prawdopodobnie nie potrzebujesz już odpowiedzi, ale to może pomóc komuś.

+0

Proste jest dobre. – Zeek

Powiązane problemy