これはあなたの要件に対する正確な回答ではありませんが、より一般的な回答を投稿してください。さまざまな方法でそれを行うことができます:
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 メソッドは低速であることがわかりました。もちろん、現実のシナリオでは、これらは問題になりません。読みやすさのために、3番目の方法(Linq)を好みます。
DateTime d = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
Action();
}
MessageBox.Show((DateTime.Now - d).TotalMilliseconds.ToString());
リストボックスに約300個のアイテムを使用して複数回実行する10000回の反復の場合、
1) ~100ms
2) ~150ms
3) ~250ms
4) ~260ms