¿Cómo crear el nombre de una variable de manera dinámica?

publicado por: Anonymous

Lo que me gustaría realizar es la generación automática del nombre de mi variable de tipo DataTable, quiero que su nombre siempre vaya en incremento haciendo un nombre único e identificable.

Código actual:

for (int z = 0; z < 2; z++)
{
     consulta[z]= "select * from v_Autorizaciones where Empresa='" + valores[z] + "'" + "|";
    DataTable tb_menu+z = new DataTable();
}

Como se puede apreciar, en el código me marca un error en DataTable tb_menu+z = new DataTable(); ya que le estoy asignando un valor numérico al supuesto nombre que debería tener la variable de tipo DataTable. Me gustaría que el resultado fuera algo como tb_menu0, tb_menu1, tb_menu2, tb_menu3, etc.

solución

Una opción es, que en lugar de crear variables dinámicas mejor declares una lista de DataTable de la siguiente forma:

List<DataTable> listaDataTable = new List<DataTable>();
for (int z = 0; z < 2; z++)
{
    //Aquí van las secciones de tu código deseado
    DataTable objDataTable = new DataTable();
    listaDataTable.Add(objDataTable); //<-- Con .Add agregamos el objeto DataTable a la lista
}

Ahora, para hacer uso de esos DataTable solo tienes que iterar tu lista:

foreach(DataTable item in listaDataTable)
{
    //Aquí van las secciones de código que debes poner para manejar cada uno de esos DataTable
}

Actualización

Otra forma de resolverlo es creando un diccionario con la definición <int, DataTable> donde el valor entero es el consecutivo y se irían agregando los DataTable‘s según las iteraciones realizadas:

Dictionary<int, DataTable> dictDataTables = new Dictionary<int, DataTable>();
for (int z = 0; z < 2; z++)
{
    //Aquí van las secciones de tu código deseado
    DataTable objDataTable = new DataTable();
    dictDataTables.Add(z, objDataTable);
}

Ahora, para poder acceder a los elementos del diccionario, por ejemplo, deseamos acceder al DataTable que se agregó con Id = 2:

DataTable dataTableObtenido = dictDataTables.FirstOrDefault(t => t.Key == 2).Value;
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *