这不完全是您要求的答案,而是发布了一个更一般的答案。你可以通过多种方式做到这一点:
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) ~100ms
2) ~150ms
3) ~250ms
4) ~260ms