C# Foreach statement does not contain public definition for GetEnumerator
Solution 1
Your CarBootSaleList
class is not a list. It is a class that contain a list.
You have three options:
Make your CarBootSaleList
object implement IEnumerable
or
make your CarBootSaleList inherit from List<CarBootSale>
or
if you are lazy this could almost do the same thing without extra coding
List<List<CarBootSale>>
Solution 2
You don't show us the declaration of carBootSaleList
. However from the exception message I can see that it is of type CarBootSaleList
. This type doesn't implement the IEnumerable
interface and therefore cannot be used in a foreach.
Your CarBootSaleList
class should implement IEnumerable<CarBootSale>
:
public class CarBootSaleList : IEnumerable<CarBootSale>
{
private List<CarBootSale> carbootsales;
...
public IEnumerator<CarBootSale> GetEnumerator()
{
return carbootsales.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return carbootsales.GetEnumerator();
}
}
Solution 3
In foreach
loop instead of carBootSaleList
use carBootSaleList.data
.
You probably do not need answer anymore, but it could help someone.
Solution 4
You should implement the IEnumerable interface (CarBootSaleList should impl it in your case).
http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.getenumerator.aspx
But it is usually easier to subclass System.Collections.ObjectModel.Collection and friends
http://msdn.microsoft.com/en-us/library/system.collections.objectmodel.aspx
Your code also seems a bit strange, like you are nesting lists?
Related videos on Youtube
Danny
Updated on June 28, 2020Comments
-
Danny about 4 years
I'm having a problem with a Windows Form application I'm building in C#. The error is stating "foreach statement cannot operate on variables of type 'CarBootSale.CarBootSaleList' because 'CarBootSale.CarBootSaleList' does not contain a public definition for 'GetEnumerator'".
I can't seem to understand what is causing this.
This is the code that is throwing up the error:
List<CarBootSaleList> Sortcarboot = new List<CarBootSaleList>(); foreach (CarBootSale c in carBootSaleList) { if (c.Charity == "N/A") { Sortcarboot.Add(carBootSaleList); textReportGenerator.GenerateAllReport(Sortcarboot, AppData.CHARITY); } }
and this is the CarBootSaleList class where it's saying there isn't a GetEnumerator definition:
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; }
-
Phil over 11 yearsforeach (CarBootSaleList c in Sortcarboot)
-
polkduran over 11 yearsyou may find an answer here (implementation of foreach): stackoverflow.com/questions/10929586/…
-
bash.d over 11 yearsAre these two lines related? List<CarBootSaleList> Sortcarboot = new List<CarBootSaleList>(); foreach (CarBootSale c in carBootSaleList)
-
Marcus Vinicius over 11 yearsWhere are
carBootSaleList
variable declared? -
Danny over 11 years@Marcus It's at the top of the class "CarBootSaleList carBootSaleList = new CarBootSaleList();"
-
Marcus Vinicius over 11 years@Danny No, it's not. I'm asking for the VARIABLE
carBootSaleList
. You have not posted the code that declares it. -
sanepete over 6 yearsIs this answered yet please @Danny?
-
-
Security Hound over 11 yearsDid you really just suggest the author use a
List
which contains aList
ofCarBootSales
? Only the first two options actually make sense to actually do.