array - foreach c# string
La instrucción Foreach de C#no contiene una definición pública para GetEnumerator (4)
Debe implementar la interfaz IEnumerable (CarBootSaleList debería implementarla en su caso).
http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.getenumerator.aspx
Pero usualmente es más fácil subclasificar System.Collections.ObjectModel.Collection y amigos
http://msdn.microsoft.com/en-us/library/system.collections.objectmodel.aspx
¿Tu código también parece un poco extraño, como si estuvieras anidando listas?
Estoy teniendo un problema con una aplicación de Windows Form que estoy creando en C #. El error indica que "la instrucción foreach no puede operar en variables de tipo ''CarBootSale.CarBootSaleList'' porque ''CarBootSale.CarBootSaleList'' no contiene una definición pública para ''GetEnumerator''".
Parece que no puedo entender lo que está causando esto.
Este es el código que está lanzando el 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);
}
}
y esta es la clase CarBootSaleList donde dice que no hay una definición de 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;
}
En el bucle foreach en lugar de carBootSaleList use carBootSaleList.data.
Probablemente ya no necesite respuesta, pero podría ayudar a alguien.
Su clase CarBootSaleList
no es una lista. Es una clase que contiene una lista.
Tienes tres opciones:
Haga que su objeto IEnumerable
implemente IEnumerable
o
haga que su CarBootSaleList herede de la List<CarBootSale>
o
Si eres perezoso, esto podría hacer casi lo mismo sin codificación adicional.
List<List<CarBootSale>>
Usted no nos muestra la declaración de carBootSaleList
. Sin embargo, desde el mensaje de excepción puedo ver que es de tipo CarBootSaleList
. Este tipo no implementa la interfaz IEnumerable
y, por lo tanto, no se puede utilizar en un foreach.
Su clase CarBootSaleList
debe implementar IEnumerable<CarBootSale>
:
public class CarBootSaleList : IEnumerable<CarBootSale>
{
private List<CarBootSale> carbootsales;
...
public IEnumerator<CarBootSale> GetEnumerator()
{
return carbootsales.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return carbootsales.GetEnumerator();
}
}