Pregunta

Tengo esto:

// Load changelog types
ChangeLogType[] Types = ChangeLogFunctions.GetAllChangelogTypes();
foreach(ChangeLogType Rec in Types){
    ListItem N = new ListItem();
    N.Text = Rec.Type;
    N.Value = Rec.ID.ToString();
    LstChangeLogType.Items.Add(N);
}

Llama a una función que devuelve una matriz de ChangeLogTypes, y luego agrega cada una en un control de lista. ¿Hay una forma más elegante de hacer esto? Siento que estoy repitiendo código cada vez que hago esto o algo similar.

¿Fue útil?

Solución

Sí, Linq to Objects es tu amigo:

var changeLogTypes = ChangeLogFunctions.GetAllChangelogTypes()
                                       .Select(x => new ListItem { 
                                                      Text = x.Type,
                                                      Value = x.ID.ToString() })
                                       .ToList();

los Select parte es proyectar cada uno ChangeLogType a un ListItem, y ToList() convierte la secuencia resultante en un List<ListItem>.

Esto supone que realmente querías un nuevo Lista con todas estas entradas. Si necesita agregar los resultados a un existente Lista, lo harías sin el ToList llamar, pero llamando AddRange en una lista existente con el resultado del Select llamar.

Vale la pena aprender más sobre Linq en general y Linq a los objetos en particular: puede hacer todo tipo de cosas como esto mucho más simples.

Otros consejos

var range = Types.Select(rec => 
       new ListItem { Text = rec.Type, Value = rec.ID.ToString() });

LstChangeLogType.AddRange(range);

Linq?

LstChangeLogType.Items = Types.Select(x => new ListItem() 
                     { Text = x.Type, Value = x.ID.ToString() }).ToList();
using System.Linq;

var items = Types
  .Select (rec => ListItem
    {
      Text = Rec.Type;
      Value = Rec.ID.ToString();
    }

LstChangeLogType.Items.AddRange(items);

Uso de algunos métodos de extensión de LINQ:

LstChangeLogType.AddItems.AddRange(
    Types.Select(t => 
        new ListItem() { Text = t.Type, Value = t.ID.ToString() }).ToArray());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top