Frage

Ich habe das:

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

Es ruft eine Funktion auf, die ein Array von Changelogtypen zurückgibt, und fügt dann jeden in eine Listensteuerung hinzu. Gibt es eine elegantere Art, dies zu tun? Ich habe das Gefühl, dass ich jedes Mal, wenn ich das oder ähnliches mache, Code wiederhole.

War es hilfreich?

Lösung

Yup, linq zu Objekten ist dein Freund:

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

Das Select Teil ist projiziert, jeweils ChangeLogType zu einem ListItem, und ToList() konvertiert die resultierende Sequenz in a List<ListItem>.

Dies geht davon aus, dass Sie wirklich eine wollten Neu Listen Sie mit all diesen Einträgen auf. Wenn Sie die Ergebnisse zu einem hinzufügen müssen vorhandenen Liste, das würden Sie ohne die tun ToList anrufen, aber anrufen AddRange auf einer vorhandenen Liste mit dem Ergebnis der Select Anruf.

Es lohnt sich, mehr über Linq im Allgemeinen und Linq für Objekte im Besonderen zu lernen - es kann alle möglichen Dinge wie so viel einfacher machen.

Andere Tipps

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

Verwenden einiger Linq -Erweiterungsmethoden:

LstChangeLogType.AddItems.AddRange(
    Types.Select(t => 
        new ListItem() { Text = t.Type, Value = t.ID.ToString() }).ToArray());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top