¿Alguien puede compartir un ejemplo simple del uso de la palabra clave foreach
con objetos personalizados?Cómo utilizar la palabra clave foreach en Objetos personalizados en C#
Respuesta
Dadas las etiquetas, supongo que te refieres a .NET, y elegiré hablar sobre C#, ya que eso es lo que sé.
La declaración foreach
(generalmente) utiliza IEnumerable
y IEnumerator
o sus primos genéricos. Una declaración de la forma:
foreach (Foo element in source)
{
// Body
}
donde source
implementa IEnumerable<Foo>
es más o menos equivalente a:
using (IEnumerator<Foo> iterator = source.GetEnumerator())
{
Foo element;
while (iterator.MoveNext())
{
element = iterator.Current;
// Body
}
}
Tenga en cuenta que la IEnumerator<Foo>
está dispuesto en el extremo, sin embargo, las salidas de los estados. Esto es importante para los bloques de iteradores.
Para implementar IEnumerable<T>
o IEnumerator<T>
usted mismo, la manera más fácil es usar un bloque iterador. En lugar de escribir todos los detalles aquí, probablemente sea mejor simplemente referirlo a chapter 6 of C# in Depth, que es una descarga gratuita. Todo el capítulo 6 está sobre iteradores. Tengo otro par de artículos en mi C# en el sitio de la profundidad, también:
Como un ejemplo rápido sin embargo:
public IEnumerable<int> EvenNumbers0To10()
{
for (int i=0; i <= 10; i += 2)
{
yield return i;
}
}
// Later
foreach (int x in EvenNumbers0To10())
{
Console.WriteLine(x); // 0, 2, 4, 6, 8, 10
}
Implementar IEnumerable<T>
para una escriba, puede hacer algo como:
public class Foo implements IEnumerable<string>
{
public IEnumerator<string> GetEnumerator()
{
yield return "x";
yield return "y";
}
// Explicit interface implementation for nongeneric interface
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator(); // Just return the generic version
}
}
El enlace directo de PDF se redirige a la página de dotación: quizás esto funcione mejor: http://www.manning.com/skeet/ –
Gracias mucho, arreglando ahora Eso es un poco molesto :( –
(supongo C# aquí)
Si usted tiene una lista de objetos personalizados que sólo puede utilizar el foreach de la misma manera como lo hace con cualquier otro objeto:
List<MyObject> myObjects = // something
foreach(MyObject myObject in myObjects)
{
// Do something nifty here
}
Si desea Para crear su propio contenedor, puede usar la palabra clave yield (desde .Net 2.0 y hacia arriba, creo) junto con la interfaz IEnumerable.
class MyContainer : IEnumerable<int>
{
private int max = 0;
public MyContainer(int max)
{
this.max = max;
}
public IEnumerator<int> GetEnumerator()
{
for(int i = 0; i < max; ++i)
yield return i;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
y luego usarlo con foreach:
MyContainer myContainer = new MyContainer(10);
foreach(int i in myContainer)
Console.WriteLine(i);
- 1. palabra clave foreach en java?
- 2. Objetos, parámetros y la palabra clave ref en C#
- 3. ¿Cómo uso programáticamente la palabra clave "usar" en C#?
- 4. ¿Cómo utilizar la palabra clave BETWEEN en Entity Framework?
- 5. Palabra clave "foreach" inesperada después del carácter "@"
- 6. Java: cuándo utilizar la palabra clave 'this'
- 7. Enlace de componente en metadatos personalizados en Palabra clave
- 8. Registro palabra clave en C++
- 9. palabra clave "agradable" en C++?
- 10. palabra clave 'fuera' en C++
- 11. palabra clave estática en C#
- 12. 5 formas de utilizar la palabra clave estática en Java
- 13. ¿Cuándo NO utilizar la palabra clave estática en Java?
- 14. Palabra clave reservada en la enumeración en C#
- 15. Cómo utilizar foreach en C++ cli en el código administrado
- 16. ¿Necesita C# la palabra clave privada?
- 17. Palabra clave protegida C#
- 18. ¿Cuál es la palabra clave de rendimiento utilizada en C#?
- 19. ¿Equivalente a la palabra clave "using" de C# en powershell?
- 20. C# palabra clave virtual
- 21. ¿Equivalente de la palabra clave C# `readonly` en D?
- 22. C bucle # foreach con valor de clave
- 23. Scala: objetos complementarios y palabra clave "nueva"
- 24. Asigne esta palabra clave en C#
- 25. palabra clave "nueva" en Scala
- 26. Comparando 2 objetos personalizados - C#
- 27. ¿Cuándo debería usar la palabra clave "this" en C++?
- 28. Palabra clave abstracta en PHP
- 29. C++: estructura y la nueva palabra clave
- 30. Palabra clave sin firmar en C++
Lo que es específicamente la cuestión? ¿Cómo * usar * foreach con un objeto personalizado? ¿O cómo escribir código en el objeto personalizado para que foreach pueda usarse en él? –
cómo escribir código en el objeto personalizado para que foreach se pueda usar en él – user42070