while usa instruccion hacer for explicacion ejemplo como ciclo bucles c# .net loops

c# - usa - ¿Se evalúa la condición en un bucle for cada iteración?



foreach c# explicacion (4)

Count se evaluaría en cada pase. Si continúa agregando a la colección y el iterador nunca alcanza, tendrá un ciclo infinito.

class Program { static void Main(string[] args) { List<int> intCollection = new List<int>(); for(int i=-1;i < intCollection.Count;i++) { intCollection.Add(i + 1); } } }

Eventualmente obtendrá una excepción de falta de memoria.

Cuando haces cosas como:

for (int i = 0; i < collection.Count; ++i )

es collection.Count llamado en cada iteración?

¿Cambiará el resultado si la propiedad Count recibe dinámicamente el conteo en la llamada?


El conteo Sí se verifica en cada llamada desde la primera iteración después de la inicialización de i hasta la última iteración donde falla la verificación y se sale del ciclo for. Puede modificar el recuento de colecciones si lo desea, pero se da cuenta de que podría terminar en un ciclo infinito.


Nota al margen, esto NO se verifica para cada interacción en VB.

A diferencia de C #, VB almacena en caché el resultado de la colección. Count.

EDITAR:

La versión literal de VB del ciclo C # for es:

Dim i = 0 Do While i < collection.Count ''code goes here i+=1 Loop


Sí. El recuento se evaluará en cada pase individual. La razón es que es posible que la colección se modifique durante la ejecución de un ciclo. Dada la estructura de bucle, la variable i debería representar un índice válido en la colección durante una iteración. Si la verificación no se realizó en cada ciclo, entonces esto no es posible. Ejemplo de caso

for ( int i = 0; i < collection.Count; i++ ) { collection.Clear(); }

La única excepción a esta regla es recorrer una matriz donde la restricción es la Longitud.

for ( int i = 0; i < someArray.Length; i++ ) { // Code }

El CLR JIT presentará un caso especial de este tipo de bucle, en determinadas circunstancias, ya que la longitud de una matriz no puede cambiar. En esos casos, la verificación de límites solo se realizará una vez.

Referencia: http://blogs.msdn.com/brada/archive/2005/04/23/411321.aspx