Наиболее лаконичным способом для преобразования списка.элементы в общий список


Я использую C# и нацелен на .NET Framework 3.5. Я ищу небольшой, лаконичный и эффективный кусок кода, чтобы скопировать все элементы в ListBox до List<String> (Generic список).

На данный момент у меня что-то похожее на приведенный ниже код:

        List<String> myOtherList =  new List<String>();
        // Populate our colCriteria with the selected columns.

        foreach (String strCol in lbMyListBox.Items)
        {
            myOtherList.Add(strCol);
        }

, который работает, конечно, но я не могу помочь, но чувствую, что там должен быть лучший способ сделать это с некоторыми из новых возможностей языка. Я думал что-то вроде список.ConvertAll метод, но это относится только к общим спискам, а не списка.ObjectCollection коллекций.

5 55

5 ответов:

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

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

конечно, вы можете изменить параметр типа приведения к любому типу, который вы сохранили в свойстве 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);

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

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

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

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