最简洁的方式将ListBox.items转换为通用列表

我正在使用C#并针对.NET Framework 3.5。 我正在寻找一个简单而有效的小代码,将ListBox中的所有项复制到List<String> (通用列表 )中。

目前我有类似于下面的代码:

  List<String> myOtherList = new List<String>(); // Populate our colCriteria with the selected columns. foreach (String strCol in lbMyListBox.Items) { myOtherList.Add(strCol); } 

当然,这是有效的,但是我不禁感到,用一些较新的语言function必须有更好的方法来做到这一点。 我在想像List.ConvertAll方法的东西,但这只适用于generics列表而不是ListBox.ObjectCollection集合。

一点LINQ应该这样做: –

  var myOtherList = lbMyListBox.Items.Cast<String>().ToList(); 

当然,您可以将Cast的Type参数修改为您存储在Items属性中的任何types。

下面将做到这一点(使用Linq):

 List<string> list = lbMyListBox.Items.OfType<string>().ToList(); 

OfType调用将确保只使用string的列表框项目中的项目。

使用投射 ,如果任何项目不是string,你会得到一个exception。

这个怎么样:

 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>(); }