C#を使用し、.NET Framework 3.5をターゲットにしています。 ListBox のすべての項目をList<String>
(Generic List )にコピーするための、小さく簡潔で効率的なコードを探しています。
現時点では、次のコードに似たものがあります:
List<String> myOtherList = new List<String>();
// Populate our colCriteria with the selected columns.
foreach (String strCol in lbMyListBox.Items)
{
myOtherList.Add(strCol);
}
もちろんこれは機能しますが、新しい言語機能のいくつかを使ってこれを行うにはもっと良い方法があるはずだと感じずにはいられません。 List.ConvertAll メソッドのようなものを考えていましたが、これは汎用リストにのみ適用され、 ListBox.ObjectCollection コレクションには適用されません。
少しLINQがそれを行う必要があります:-
var myOtherList = lbMyListBox.Items.Cast<String>().ToList();
もちろん、CastのTypeパラメーターを、Itemsプロパティに保存したタイプに変更できます。
これはどう:
List<string> myOtherList = (from l in lbMyListBox.Items.Cast<ListItem>() select l.Value).ToList();
どうですか:
myOtherList.AddRange(lbMyListBox.Items);
コメントとDavidGougeの答えに基づいて編集:
myOtherList.AddRange(lbMyListBox.Items.Select(item => ((ListItem)item).Value));
これ以上必要ありません。リストボックスからすべての値のリストを取得します
private static List<string> GetAllElements(ListBox chkList)
{
return chkList.Items.Cast<ListItem>().Select(x => x.Value).ToList<string>();
}