array c# foreach

array - foreach var c#



¿Hay algún efecto secundario de regresar desde el interior de una declaración foreach? (5)

Similar a mi pregunta sobre regresar desde dentro de una declaración de uso (cuya respuesta fue en general " sí, está bien ") Me pregunto si regresar desde el interior de una declaración foreach es igualmente carente de efectos secundarios y se considera práctica aceptada , o cuando lo hago esto estoy dejando un puntero colgando en el centro una enumeración en algún lugar internamente, etc.

Aquí hay un ejemplo:

public string GetCurrentTransaction(string idText) { foreach (var transaction in transactions) { if (idText.IsEquivalentTo(transaction.IdText)) { return transaction.Content; } } return ""; }


Mientras nada implemente IDisposable (o tiene un bloque de using alrededor), entonces eso debería estar bien.

Hasta donde yo sé, es una práctica bastante común y aceptada y, como Astander menciona en su publicación, la documentación para foreach aprueba como una práctica legítima.


No sé, pero haré una suposición fundamentada: dado que un enumerador generalmente no implementa IDisposable, debería ser simplemente recolectado como basura, porque de lo contrario cada uso de ese enumerador podría generar pérdidas de recursos no administrados. Por supuesto, técnicamente, puede implementar un enumerador que tenga efectos secundarios por sí mismo ...

En otras palabras, nunca me sentí mal por regresar de un bloque foreach . Esperaría que el lenguaje maneje las cosas, al igual que con una declaración de using , donde el lenguaje asegura que el objeto se descarta (llamando implícitamente a Dispose en un bloque finally ).



Por lo que recuerdo, la enumeración se mantiene en esta posición hasta el próximo ciclo foreach. Sin embargo, esto no es un problema ya que cualquier siguiente foreach devuelve la posición al inicio de la enumeración. En resumen: no tiene efectos secundarios negativos a menos que confíe en IEnumerator. Actualmente tiene un valor específico (que de todos modos sería malo).


aparte de ser un pequeño olor a código para regresar de múltiples puntos en los métodos (se agrega a la complejidad ciclomática de los métodos) no hay motivo técnico por el que preocuparse.