type multiple method generic example collection clase c# generics collections type-conversion

multiple - list generic c#



La manera más sucinta de convertir ListBox.items en una lista genérica (5)

Lo siguiente lo hará (usando Linq):

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

La llamada OfType asegurará que solo se utilicen elementos en los elementos de la lista que sean cadenas.

Usando Cast , si alguno de los elementos no son cadenas, obtendrá una excepción.

Estoy usando C # y apuntando a .NET Framework 3.5. Estoy buscando una pequeña, sucinta y eficiente pieza de código para copiar todos los elementos en un ListBox a una List<String> ( List genérica).

Por el momento tengo algo similar al siguiente código:

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

Lo cual funciona, por supuesto, pero no puedo evitar tener la sensación de que debe haber una forma mejor de hacerlo con algunas de las funciones de lenguaje más nuevas. Estaba pensando en algo así como el método List.ConvertAll , pero esto solo se aplica a las listas genéricas y no a ListBox.ObjectCollection colecciones de ListBox.ObjectCollection .


No necesitas más Obtiene Lista de todos los valores de Listbox

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


Qué pasa:

myOtherList.AddRange(lbMyListBox.Items);

EDIT basado en comentarios y la respuesta de DavidGouge:

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


Qué tal esto:

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


Un poco de LINQ debería hacerlo:

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

Por supuesto, puede modificar el parámetro Tipo del Cast para cualquier tipo que haya almacenado en la propiedad Items.