Domanda

Ho questo:

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

Chiama una funzione che restituisce un array di mutande, quindi aggiunge ognuno in un controllo dell'elenco. C'è un modo più elegante di farlo? Sento che sto ripetendo il codice ogni volta che faccio questo o qualcosa di simile.

È stato utile?

Soluzione

Sì, Linq agli oggetti è tuo amico:

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

Il Select La parte sta proiettando ciascuno ChangeLogType a a ListItem, e ToList() converte la sequenza risultante in a List<ListItem>.

Questo presuppone che tu volessi davvero un nuovo Elenco con tutte queste voci. Se è necessario aggiungere i risultati a un esistente elenco, lo faresti senza il ToList Chiama, ma chiama AddRange in un elenco esistente con il risultato del Select chiamata.

Vale la pena imparare di più su LINQ in generale e Linq agli oggetti in particolare: può rendere molto più semplici tutti i tipi di cose come questo.

Altri suggerimenti

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());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top