switch loop for examples array c# for-loop

c# - loop - ¿Cómo manejar una excepción en un bucle y seguir iterando?



switch c# (7)

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 insertar una declaración try catch en su bucle for.

Si se lanza una excepción, no hay manera de completar esa iteración como lo haría si no se lanzara la excepción. Sin embargo, al utilizar un try catch puede asegurarse de que su bucle ejecute todas las iteraciones que no arrojen excepciones.

Si necesita ayuda para incorporar el manejo de excepciones en un bucle for, simplemente use el ejemplo publicado por teedyay.

Necesito un bucle for que complete todas sus iteraciones incluso si hay alguna excepción en cualquiera de las iteraciones.


Creo que también vale la pena señalar que si está utilizando una lista genérica, puede usar lo siguiente para iterar la colección:

ForEach (Acción)

http://msdn.microsoft.com/en-us/library/bwabdf9z.aspx

EmployeesList.ForEach(ProcessEmployee); void ProcessEmployee(Employee employeeItem) { try { ... } catch { } }

Esto tiene el beneficio de hacer que el código en tu bucle sea reutilizable.


No hay una función incorporada en un ciclo para 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, en la medida de lo posible, evite colocar bloques try-catch dentro del ciclo. A pesar de que resuelve el problema que menciona, considere que el compilador y el tiempo de ejecución tienen que hacer tanto trabajo adicional. Si no hubiera excepciones, todo eso sería inútil.

En cambio, permita que las excepciones sean 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.


O bien, si este es un patrón recurrente en su programa, y se está arriesgando por este estilo de excepción "catch all" , envuélvalo como una extensión de sus colecciones. Aplicando al 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 { } } }


Simplemente ponga cada iteración dentro de una try ... catch

foreach(Person a in people) { try { WorkOnPerson(a); } catch { // do something if you want to. } }


for (...) { try { // Do stuff } catch (Exception ex) { // Handle (or ignore) the exception } }


¿Sabes cuál es la excepción y qué la causará? ¿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.