Pasar de ArrayList a array en C#

Patxi, May 22nd, 2005

Hay bastantes ocasiones en las que escribo código en .NET para métodos que necesito que me devuelvan arrays de elementos, sin embargo, dentro de estos métodos normalmente trabajo con ArrayList o algún otro tipo de colección. Esto suele ser habitual cuando dentro del método, no es posible saber a priori el número de elementos que tendrá el array, o que aun siendo posible, no resulta tan eficiente como almacenar los elementos temporalmente en una colección tipo ArrayList por ejemplo, y pasarlas luego a un array.

Para estos casos la clase Arraylist dispone de un método de nombre “ToArray” mediante el cual es posible pasar todo su contenido a un array. Para ello es únicamente necesario indicar al método el tipo de elementos que contiene el ArrayList y hacer un cast al resultado del método, de forma que pasemos de object[] al tipo de array que necesitemos.

// este método de ejemplo lo único que hace es devolver
// un array de strings con tantos elementos como le indiquemos
public string[] GetNombres(int num)
{
   ArrayList nombres = new ArrayList();

   for(int i=0;i<num;i++)
      nombres.Add("Nombre "+i);

   return (string[])nombres.ToArray(typeof(string));
}

La última línea es la encargada de realizar la transformación de ArrayList a array de strings y devolver el resultado. Para ello lo primero que se hace es llamar al método ToArray, indicándole que el tipo de los elementos almacenados es string. Al resultado de llamar a este método la aplicamos un cast a string[], de forma que lo que obtenemos finalmente en un array de strings.

En aquellas circunstancias en las que los elementos almacenados en el ArrayList puedan no ser homogéneos sería necesario aplicar un control de errores para manejar la generación de excepciones.

Compártelo:
  • Twitter
  • Meneame
  • del.icio.us
  • Facebook
  • BarraPunto
  • Digg
  • Google Bookmarks
  • Netvibes
  • Bitacoras.com
  • LinkedIn
  • Tumblr
  • email
  • MySpace
  • Technorati
  • Add to favorites

30 Comentarios para “Pasar de ArrayList a array en C#”

  1. Luis dice:

    Tu articulo es muy bueno, me ayudo mucho.

  2. Andres dice:

    Me gusto mucho….

  3. alejo dice:

    Esta super tu ejemplo..muchas gracias…

  4. sonso dice:

    que hay del paso contrario?se puede convertir de array de string[] a Arraylist??

  5. Patxi dice:

    Sí, es sencillo:

    string[] cadenas = new string[]{”esto”,”es”,”una”,”prueba”};
    ArrayList lst = new ArrayList(cadenas);

  6. YULIA dice:

    HOLAs un favor podrian decirme como es para convertir de un array aun tipo string… se lo agradeceria

  7. Esteban dice:

    Hola,podría decirme si existe la forma de que un query de SQL se pueda almacenar en un array List, en sí quiero la forma como se puede ir desplazando en la base de datos para que se guarde en el array list. Les agradecería muchísimo

  8. jesus manuel dice:

    disculpen quisiera saber como se declaro un array dinamico en c#
    y como lo utilizo }… gracias..

  9. abraham dice:

    Patxi:

    Es mejor utilizar un ArrayList q un generico List; sera por rendimiento; tu articulo me ayudo, pero lo q necesito hacer es dentro del arreglo una busqueda; pero q no necesariamente se tenga q ordenar el arreglo.

  10. Hector dice:

    Excelente solucion.

  11. Aprendiz83 dice:

    Muy bueno!!!
    :) y útil!!!
    Saludos!

  12. Luchex dice:

    Por favor yo tengo un problema ya que mi arraylist contiene datos del tipo decimal y me da problemas de casteo, como puedo hacerle para convertir un arraylist con numeros a string[]

    creo que seria algo asi:

    public string[] GetNumeros(int num)
    {
    ArrayList nombres = new ArrayList();
    decimal n = 0;
    for (int i = 0; i

  13. EliSoft dice:

    esta muy bien tu ejemplo, pero no se si me puedeas ayudar, resulta que tengo unas carpetas con imagenes .jpg la que menos tiene son 6000, mi pregunta es debo utilizar un arreglo para leer y grabar en sqlserver todas las imagenes?, o como hago para decirle que lea cierta carpeta agarre la primera y luego la siguiente…

  14. Yei dice:

    ¿como ordeno alfabéticamente uan lista de string?

  15. SANTIAGO dice:

    HOLA, necesito un favor… he creadouna clase con 3 datos miembros,y varios objetos de la clase…A cada objeto lo he metido en un elemento de mi arraylist, una vez los objetos adentro del array, quisiera sacar la informacion de cada elemento de cada objeto ingresado en el arraylist? SE PUEDE HACER ESO?

  16. Iván dice:

    hola, quisiera ver si me pueden ayudar deseo ver si puedo alamacenar arraylist dentro de un arraylist y como accedere a ellos, espero me puedan ayudar gracias

  17. Luis dice:

    Hola tengo una duda y necesito que alguien me ayude

    Tengo un array de strings llamado Nombres {”Jose”,”Ana”,”Maria”}

    Mi problema es que tengo que ordenarlo y no puedo. Quise aplicar la burbuja pero para enteros lo tengo claro pero para string no, alguien me puede ayudar por favor?

    Gracias

  18. Patxi dice:

    Hola Luis, puedes por ejemplo crearte un ArrayList con el array y realizar luego una llamada al método Sort.

  19. Oscar dice:

    Mira Luis:
    Has algo facil…
    ultiliza cualquier metodo que quieras
    pero usa el mas facil “BURBUJA”
    con el siguiente Cambio
    internal static string[] Ordenar(string[] ArrCadenas)
    {
    int i=0,j=0;
    int[] aux=new int[1000];
    for(i=0;iaux[j])
    {
    temp=aux[i];
    aux[i]=aux[j];
    aux[j]=temp;
    }
    }
    return aux;
    }
    }
    y eso es todo…

  20. Adrian dice:

    yo creo que tienes razon soy estudiante de informatica y utilizo el mismo metodo de burbuja

  21. Roi dice:

    Mejor que el burbuja es el quick sort, o el merge. De todas formas el arrayList ya contiene un método sort para ordenar.

  22. solraC# dice:

    Intentaba pasar un arraylist a un campo array de una estructura y no había forma.

    Gracias me ha ayudado mucho.

  23. Alfonso Navarro dice:

    Estoy tratando de realizar un traspazo pero al array me keda null no se porke porfa ayudenme ke llevo bastante tiempo en esto… les dejo el codigo

    arraylistalarma guarda todos los valores de un datatimepicker guardado en una base de datos, si no estoy mal el arraylist guarda los datos como un objeto.

    datosalarma = (string[])arraylistalarma.ToArray(typeof(string));

  24. Patxi dice:

    Alfonso, si lo que quieres es tener un array con los datos del ArrayList, lo que tienes que hacer es sustituir “string” por el tipo de los datos que estés almacenando en el ArrayList. La variable datosalarma debería ser un array de elementos de este mismo tipo.

  25. Esperanza dice:

    creo lo mismo pero en verdad ke de metodos no muy bien
    podrias explicar lo de arraylist

  26. Noé dice:

    Hola:
    Una sugerencia, deberías hacer un
    nombres.TrimToSize()
    antes de hacer el
    return (string[])nombres.ToArray(typeof(string));
    Un saludo desde Asturias

  27. roque dice:

    Tengo este codigo y quiero que un grid me muestre el contenido del archivo de texto pero solo me da el length y no el contenido

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Collections;

    namespace LectorTexto
    {
    public partial class frmLectorTexto : Form
    {
    public frmLectorTexto()
    {
    InitializeComponent();

    }

    private void bttDarRuta_Click(object sender, EventArgs e)
    {

    this.opfRutaArchivo.Filter = “Archivos de texto (*.txt)|*.txt”;
    if (this.opfRutaArchivo.ShowDialog() == DialogResult.OK)
    {
    //MessageBox.Show(”El Path seleccionado es:” + this.opfRutaArchivo.FileName);
    dgvResultado.DataSource = leerArchivo(this.opfRutaArchivo.FileName);

    }

    }

    private string[] leerArchivo(string pathDelArchivo)
    {
    ArrayList valores = new ArrayList();
    string texto = “”;
    FileStream archivo = new FileStream(pathDelArchivo, FileMode.Open, FileAccess.Read);
    StreamReader archivoLeido = new StreamReader(archivo);
    while ((texto = archivoLeido.ReadLine()) != null)
    {
    valores.Add(texto);
    }

    return (string[])valores.ToArray(typeof(string));
    }

    }
    }

  28. Carlosptt dice:

    Gracias XD me sirvio de mucha ayuda XD

  29. Dulce dice:

    Hola alguien podría auxiliarme en el siguiente código como puedo utilizar una lista en vez de un vector, me lo han dejado de tarea pero no lo se, soy nueva en C#, por favor ayúdenme!

    static void main (string [] args)
    {
    Animal[] vecanimales=new Animal[3];
    Perro objperro = new Perro();
    Gato objgato = new Gato();
    Perico objperro = new Perico();

    vecanimales[0]=objperro;
    vecanimales[0]=objgato;
    vecanimales[0]=objperico;

    for (int i=0;i<=2;i++)
    {
    console.WriteLine("Sonido: "+vecanimales[i].sonar());
    }
    }

  30. Patxi dice:

    Dulce, es fácil, si te lo han puesto de tarea es para que aprendas, no para que te lo hagan, seguro que estás de acuerdo.

Deja un comentario