Pergunta

Eu tenho isso:

// 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);
}

Ele chama uma função que retorna uma matriz de ChangeLogTypes e adiciona cada um a um controle de lista.Existe uma maneira mais elegante de fazer isso?Sinto que estou repetindo o código cada vez que faço isso ou algo semelhante.

Foi útil?

Solução

Sim, LINQ to Objects é seu amigo:

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

A parte Select está projetando cada ChangeLogType em um ListItem e ToList() converte a sequência resultante em um List<ListItem>.

Isso pressupõe que você realmente deseja uma nova lista com todas essas entradas.Se você precisar adicionar os resultados a uma lista existente , faria isso sem a chamada ToList, mas chamando AddRange em uma lista existente com o resultado da chamada Select.

Vale a pena aprender mais sobre LINQ em geral e LINQ to Objects em particular - ele pode tornar todos os tipos de coisas assim muito mais simples.

Outras dicas

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);

Using some LINQ extension methods:

LstChangeLogType.AddItems.AddRange(
    Types.Select(t => 
        new ListItem() { Text = t.Type, Value = t.ID.ToString() }).ToArray());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top