Principales respuestas
Que es mejor declarar variables dentro de un ciclo o fuera del el

Pregunta
-
Buenas, tengo la siguiente consulta
¿Para un rendimiento mejor que se recomienda declarar variables dentro de un ciclo o fuera de el y sobre escribirlas?
Ejemplo 1 variables fuera del ciclo
if (CboNumerosCliente.Items.Count > 0)
{
string numero= string.Empty;
string oficina = string.Empty;
var valor = new ListItem();
foreach (var item in CboNumerosCliente.Items)
{
valor = item as ListItem;
numero = valor.Value;
if (!string.IsNullOrWhiteSpace(numero))
{
oficina = numero.Substring(5, 3);
if (oficina.Equals("2000"))
CboNumerosCliente.Items.Remove(item.ToString());
}
}Ejemplo 2 variables declaradas dentro del ciclo.
foreach (var item in CboNumerosCliente.Items)
{
var valor = item as ListItem;
string numero = valor.Value;
if (!string.IsNullOrWhiteSpace(numero))
{
string oficina = numero.Substring(5, 4);
if (oficina.Equals("2000"))
CboNumerosCliente.Items.Remove(item.ToString());
}
}
Respuestas
-
hola
Por lo general se recomienda definir las variables en el scope (ambito) en que vas a usarlas, mas que nada para evitar problemas de asignacion
En los ejemplos que das es indistinto, pero queda claro que definirlas dentro queda el codigo mas prolijo, ademas no hace falta definirlas fuera cuando solo las vas usar dentro del foreach
ademas puedes evitar algunas variables
foreach (var item in CboNumerosCliente.Items) { string numero = ((ListItem)item).Value; if (!string.IsNullOrWhiteSpace(numero)) { string oficina = numero.Substring(5, 4); if (oficina.Equals("2000")) CboNumerosCliente.Items.Remove(item.ToString()); } }
lo que estoy en duda es si usando un foreach puede eliminar item de la lista que estas iterando, estas seguro que el Remove() no genera ninguna problema con el foreach? yo diria que si, que debes usar una lista temporal donde agregues los items a eliminar y realice el remove en el segundo loop recorriendo esa lista
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Marcado como respuesta StevenCR27 miércoles, 24 de junio de 2020 21:53
Todas las respuestas
-
En el caso de tu código no tiene mayor importancia si las declaras dentro o fuera de un ciclo, de hecho, los datos tipo string generan un nuevo objeto cada vez que le asignas un valor. La única y pequeña diferencia es que declaradas dentro del ciclo, cuando este finaliza, envía todos los datos al GarbageCollector.
Para clases, estructuras y tipos de datos de alguna librería externa que tenga que tener datos sin valor asignado para cada ciclo, lo mejor es que la instancies en cada iteración del código. Si tiene que mantener la información guardada en todo el ámbito del ciclo y -además- tienes que consultar sus propiedades y valores, deberás declararla siempre fuera del ciclo.
PD: Los objetos y variables que que declares e instancies dentro de un for, foreach, while, if-else etcéteram, sólo tienen alcance (visibilidad) dentro del propio proceso iterativo.Espero que te resulte de utlidad.
- Editado LPraderaOstermann miércoles, 24 de junio de 2020 17:30
-
hola
Por lo general se recomienda definir las variables en el scope (ambito) en que vas a usarlas, mas que nada para evitar problemas de asignacion
En los ejemplos que das es indistinto, pero queda claro que definirlas dentro queda el codigo mas prolijo, ademas no hace falta definirlas fuera cuando solo las vas usar dentro del foreach
ademas puedes evitar algunas variables
foreach (var item in CboNumerosCliente.Items) { string numero = ((ListItem)item).Value; if (!string.IsNullOrWhiteSpace(numero)) { string oficina = numero.Substring(5, 4); if (oficina.Equals("2000")) CboNumerosCliente.Items.Remove(item.ToString()); } }
lo que estoy en duda es si usando un foreach puede eliminar item de la lista que estas iterando, estas seguro que el Remove() no genera ninguna problema con el foreach? yo diria que si, que debes usar una lista temporal donde agregues los items a eliminar y realice el remove en el segundo loop recorriendo esa lista
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Marcado como respuesta StevenCR27 miércoles, 24 de junio de 2020 21:53
-
Hola StevenCR27,
Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado.
Si es necesario, por favor abra un nuevo hilo.
Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte.
Gracias por usar los foros de MSDN.
Andres Aguilar
____________________________