Подтвердить что ты не робот

Самый сжатый способ конвертировать ListBox.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.

4b9b3361

Ответ 1

Немного LINQ должен сделать это: -

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

Конечно, вы можете изменить параметр "Тип" для Cast, независимо от того, какой тип вы сохранили в свойстве Items.

Ответ 2

Следующее сделает это (используя Linq):

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

Вызов OfType гарантирует, что будут использоваться только элементы в элементах списка, которые являются строками.

Используя Cast, если какой-либо из элементов не является строкой, вы получите исключение.

Ответ 3

Как насчет этого:

List<string> myOtherList = (from l in lbMyListBox.Items.Cast<ListItem>() select l.Value).ToList();

Ответ 4

Как насчет:

myOtherList.AddRange(lbMyListBox.Items);

EDIT на основе комментариев и ответа DavidGouge:

myOtherList.AddRange(lbMyListBox.Items.Select(item => ((ListItem)item).Value));

Ответ 5

Вам больше не нужно. Вы получаете список всех значений из списка

private static List<string> GetAllElements(ListBox chkList)
        {
            return chkList.Items.Cast<ListItem>().Select(x => x.Value).ToList<string>();
        }