Ответ 1
Немного LINQ должен сделать это: -
var myOtherList = lbMyListBox.Items.Cast<String>().ToList();
Конечно, вы можете изменить параметр "Тип" для Cast, независимо от того, какой тип вы сохранили в свойстве Items.
Я использую С# и таргетинг на .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);
}
Что работает, конечно, но я не могу не понять, что должен быть лучший способ сделать это с некоторыми новыми функциями языка. Я думал о чем-то вроде List.ConvertAll, но это относится только к общим спискам, а не ListBox.ObjectCollection.
Немного LINQ должен сделать это: -
var myOtherList = lbMyListBox.Items.Cast<String>().ToList();
Конечно, вы можете изменить параметр "Тип" для Cast, независимо от того, какой тип вы сохранили в свойстве Items.
Следующее сделает это (используя Linq):
List<string> list = lbMyListBox.Items.OfType<string>().ToList();
Вызов OfType гарантирует, что будут использоваться только элементы в элементах списка, которые являются строками.
Используя Cast, если какой-либо из элементов не является строкой, вы получите исключение.
Как насчет этого:
List<string> myOtherList = (from l in lbMyListBox.Items.Cast<ListItem>() select l.Value).ToList();
Как насчет:
myOtherList.AddRange(lbMyListBox.Items);
EDIT на основе комментариев и ответа 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>();
}