Question

J'ai ceci:

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

Il appelle une fonction qui renvoie un tableau de ChangeLogTypes, et ajoute ensuite chacun dans un contrôle de liste. Y at-il une façon plus élégante de le faire? Je sens que je répète le code chaque fois que je fais ceci ou quelque chose de similaire.

Était-ce utile?

La solution

Eh oui, LINQ to Objects est votre ami:

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

La partie Select projette chaque ChangeLogType à un ListItem, et ToList() convertit la séquence résultant en une List<ListItem>.

Ceci est en supposant que vous vouliez vraiment nouvelle liste avec toutes ces entrées. Si vous avez besoin d'ajouter les résultats à une existant , vous feriez sans que l'appel ToList, mais appelant AddRange sur une liste existante avec le résultat de l'appel Select.

Il est bien l'apprentissage vaut plus sur LINQ en général et aux objets LINQ en particulier -. Il peut faire toutes sortes de choses comme ça beaucoup plus simple

Autres conseils

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

En utilisant des méthodes d'extension LINQ:

LstChangeLogType.AddItems.AddRange(
    Types.Select(t => 
        new ListItem() { Text = t.Type, Value = t.ID.ToString() }).ToArray());
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top