Esta no es exactamente la respuesta a su requerimiento, pero publicando una respuesta más general. Usted puede hacerlo en una variedad de maneras:
1)
T[] items = new T[lb.Items.Count];
lb.Items.CopyTo(items, 0);
var lst = new List<T>(items);
2) y la adición de bucle utilizando foreach
como usted ha mencionado.
3) usando Linq
var lst = lb.Items.Cast<T>().ToList();
4) o
var lst = lb.Items.OfType<T>().ToList();
Cuando hice algunas pruebas de rendimiento, como a continuación, encontré copia al método de matriz el más rápido mientras que los métodos Linq más lento. Por supuesto, en escenarios del mundo real, estos no importarían. Prefiero el 3er método (Linq) para la legibilidad.
DateTime d = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
Action();
}
MessageBox.Show((DateTime.Now - d).TotalMilliseconds.ToString());
Para una iteración de 10000 veces ejecutar varias veces con alrededor de 300 artículos en cuadro de lista,
1) ~ 100 ms
2) ~ 150ms
3) ~ 250 ms
4) ~ 260ms
¿Hay alguna manera de conocer el tipo de ItemCollection? Entonces el método funciona con cualquier colección de artículos sin saber el tipo – Omar
"Tipo()" - ¡Hoy aprendí algo nuevo! Gracias Matt! –