Это не совсем ответ на ваше требование, но опубликовать более общий ответ. Вы можете сделать это различными способами:
1)
T[] items = new T[lb.Items.Count];
lb.Items.CopyTo(items, 0);
var lst = new List<T>(items);
2) зацикливание и добавление с использованием foreach
, как вы упомянули.
3) с использованием Linq
var lst = lb.Items.Cast<T>().ToList();
4) или
var lst = lb.Items.OfType<T>().ToList();
Когда я провел тестирование производительности, как показано ниже, я обнаружил, что копирование в метод массива происходит быстрее, а методы Linq медленнее. Конечно, в реальных сценариях это не имеет значения. Я предпочитаю третий метод (Linq) для удобочитаемости.
DateTime d = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
Action();
}
MessageBox.Show((DateTime.Now - d).TotalMilliseconds.ToString());
Для итерации 10000 раз, выполняемой несколько раз с приблизительно 300 элементами в списке,
1) ~ 100 мс
2) ~ 150 мс
3) ~ 250 мс
4) ~ 260 мс