最简洁的方式将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>(); }