Necesito un bucle for que completará todas sus iteraciones, incluso si hay alguna excepción en cualquiera de las iteraciones.¿Cómo maneja una excepción en un bucle y sigue iterando?
Respuesta
for (...)
{
try
{
// Do stuff
}
catch (Exception ex)
{
// Handle (or ignore) the exception
}
}
Consejo de rendimiento, coloque sus declaraciones fuera del ciclo for. – freggel
@freggel: jaja, el mismo consejo que quería dar. Pero esta es la mejor solución. – user29964
Consejo: utilice una Excepción más estrictamente definida, luego Excepción, llame ApplicationException. un gran problema con la captura de excepción es que ThreadAbortException se capturará aquí, ¿realmente desea detener la aplicación para que no se detenga aquí? ¿Qué tal capturar una OutOfMemoryException? –
sólo hay que poner cada iteración dentro de un try..catch
foreach(Person a in people)
{
try
{
WorkOnPerson(a);
}
catch
{
// do something if you want to.
}
}
No hay ninguna característica intrínseca en un bucle de hacer eso. Esa no es una función de idioma integrada en C# que manejará automáticamente una excepción y continuará con un ciclo.
también a la medida de lo posible, evite poner bloques try-catch dentro del bucle. Aunque resuelve el problema que menciona, considere que el compilador & de tiempo de ejecución tiene que hacer tanto trabajo adicional. Si no hubiera excepciones, todo eso sería inútil.
En su lugar, las excepciones son excepciones. Eso es algo que ocurre excepcionalmente: fuera de las consideraciones de entrada diseñadas. Por supuesto, esto es solo una sugerencia, si realmente tiene que continuar el ciclo, vaya con las dos opciones sugeridas anteriormente.
Bueno, la cosa es ... Su solución tendrá que incluir un bucle for y algún tipo de proceso de manejo de error/excepción, por lo que probablemente tenga que incrustar una declaración try catch en su bucle for.
Si se produce una excepción, no hay forma de que se completa una iteración que como lo haría si la excepción no fue lanzado. Sin embargo, al utilizar un try catch puede asegurarse de que su bucle ejecute todas las iteraciones que no arrojen excepciones.
Si usted necesita ayuda con la incorporación de la gestión de excepciones en un bucle, sólo tiene que utilizar el ejemplo publicado por teedyay!
O, si este es un patrón recurrente en su programa, y se está arriesgando con este estilo de excepción, envuélvalo como una extensión de sus colecciones. Su aplicación en el ejemplo anterior:
people.ForEachIgnorant(ofThrowingWorkOnPerson);
O:
people.ForEachIgnorant(p => WorkOnPersonThatThrows(p));
Implementación:
public static void IgnorantForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
{
try
{
action(item);
}
catch { }
}
}
Mejor aún, agregue un argumento de tipo 'Acción
Creo que es también digno de mención que si está utilizando una lista genérica - se puede utilizar el siguiente para iterar la colección:
ForEach (acción acción)
http://msdn.microsoft.com/en-us/library/bwabdf9z.aspx
EmployeesList.ForEach(ProcessEmployee);
void ProcessEmployee(Employee employeeItem)
{
try
{
...
}
catch { }
}
Esto tiene la ventaja de hacer el código reutilizable en su bucle.
¿Conoce lo que es la excepción y lo que hará que? ¿Puedes probarlo y evitar que sea lanzado, es decir. CanCompleteStep o TryCompleteStep. si no puedes completar simplemente salta ese paso. A continuación, puede poner el manejo de excepciones fuera del ciclo.
- 1. Entity Framework; Cómo gestionar una excepción en el bucle foreach y seguir iterando
- 2. ¿Cómo se maneja una excepción con AsyncController de ASP.net MVC?
- 3. Iterando sobre el bucle "for" básico usando Handlebars.js
- 4. Python: cómo ignorar una excepción y continuar?
- 5. ¿Cómo se maneja la excepción en un hilo de fondo en una prueba unitaria?
- 6. Excepción capturada pero el programa sigue ejecutándose
- 7. TinyXML iterando los elementos
- 8. ¿Es posible CONTINUAR un bucle desde una excepción?
- 9. CLR se cierra cuando un hilo no se maneja. Excepción
- 10. HashSet Iterando al eliminar elementos en C#
- 11. ¿Cómo maneja git commits en una combinación?
- 12. iterando a través de una lista con una instrucción if
- 13. Cómo crear una tabla html con Jade iterando una matriz
- 14. ¿Cuándo, si alguna vez, el bucle sigue siendo útil?
- 15. ¿Devuelve un valor Y lanza una excepción?
- 16. iterando sobre una lista de tipos
- 17. ¿Iterando sobre listas en Makefiles?
- 18. Python: continúe bucle después de la excepción
- 19. C# - ¿Cómo maneja/captura StackOverFlowExceptions?
- 20. ¿Cómo se maneja Python int y long?
- 21. Cómo utilizar UdpClient.BeginReceive en un bucle
- 22. Scala - Captura de una excepción dentro de un mapa
- 23. Excepción que maneja el camino correcto para WebClient.DownloadString
- 24. ¿Cómo maneja una wiki varias ediciones simultáneas?
- 25. ¿Cómo generar una excepción ActiveRecord :: Rollback y devolver un valor?
- 26. iterando a través de una gama de entradas en ksh?
- 27. Iterando a través de un objeto JSON
- 28. ¿Cómo maneja Smalltalk con monkeypatching?
- 29. ¿Cómo se maneja __eq__ en Python y en qué orden?
- 30. primeros mensajes de excepción oportunidad cuando la excepción se maneja con seguridad
Esto suena como un zapato viejo vs. pregunta de vidrio de botella: http://tinyurl.com/shoevbottle.Es posible que desee proporcionar muchos más detalles para obtener mejores soluciones, incluidas las ideas que aún no ha considerado. – Wedge
Wedge, estoy de acuerdo ... si debe poner try/catch dentro de un ciclo for, como a continuación, entonces algo puede estar mal con la solución. –
@Wedge: Excelente metáfora, otro marcador para mí, gracias –