2013-03-01 11 views
14

Windows Form 응용 프로그램에 문제가 있습니다. C#으로 작성하고 있습니다. "CarBootSale.CarBootSaleList '에'GetEnumerator '에 대한 공용 정의가 없기 때문에"CarBootSale.CarBootSaleList'유형의 변수에서 foreach 문을 사용할 수 없습니다.C#의 Foreach 문에 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); 
      } 
     } 

을 그리고 이것은 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

이 두 라인이 관련되어 있습니까?목록 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 클래스는 목록이 아닙니다. 목록을 포함하는 클래스입니다. 당신의 CarBootSaleList 개체가이 거의 할 수 게으른 경우 IEnumerable

또는

이 CarBootSaleList이 List<CarBootSale>

또는

에서 상속하게 구현합니다

:

당신은 세 가지 옵션이 있습니다 여분의 코딩없이 똑같은 것을하십시오

List<List<CarBootSale>> 
+6

정말로 저자가'CarBootSales'의'List'를 포함하고있는'List'를 사용하도록 제안 했습니까? 실제로 처음 두 옵션 만 실제로 실제로 이해할 수 있습니다. –

+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

관련 문제