2010-05-09 2 views
1

de quelque code que je trouve dans Sacha Barbiers velues cadre MVVM libre, je vis ceci:C# - Liste générique et Méthode ConvertAll(), comment fonctionne-t-elle en interne?

return new DispatcherNotifiedObservableCollection<OrderModel>(
        DataAccess.DataService.FetchAllOrders(
         CurrentCustomer.CustomerId.DataValue).ConvertAll(
          new Converter<Order, OrderModel>(
            OrderModel.OrderToOrderModel))); 

FetchAllOrders retourne un List<Order> pour un certain customerID. Cette liste est convertie en List<OrderModel> ou en d'autres termes List<OrderViewModel>.

Comment cela peut-il se produire? Quelles doivent être les exigences/conditions, que chaque propriété de l'objet Order dans le List<Order> est convertie en une propriété du OrderModel?

+0

Je ne peux pas m'en empêcher mais avec le navigateur Chrome tout le texte que j'ai écrit dans la publication principale n'est pas affiché? Donc je colle ici le reste donc la phrase ci-dessus a du sens: FetchAllOrders retourne une liste pour un certain ID client. Cette liste est convertie en Liste ou en d'autres termes Liste . – msfanboy

+0

Je viens d'éditer le post pour rendre le code '<>' visible, utilisez la coche arrière (voir les informations sur le côté droit de la page lorsque vous cliquez sur 'edit'.) Vérifiez également la source du message maintenant. – ChrisF

Répondre

2

Faisons en sorte que ce code un peu plus lisible:

List<Order> orders = 
    DataAccess.DataService.FetchAllOrders(CurrentCustomer.CustomerId.DataValue); 

Converter<Order, OrderModel> converter = 
    new Converter<Order, OrderModel>(OrderModel.OrderToOrderModel); 

List<OrderModel> orderModels = orders.ConvertAll(converter); 

return new DispatcherNotifiedObservableCollection<OrderModel>(orderModels); 

Qu'est-ce qui se passe ici?

  1. Le code va chercher toutes les commandes du magasin de données et les stocke dans une liste <T>.

  2. Le code crée un délégué de type Converter < TInput, TOutput > qui convertit d'un seul Order en un seul OrderModel.

  3. Le code convertit tous les ordres en modèles de commande en appliquant le convertisseur à chaque commande.

  4. Le code renvoie une DispatcherNotifiedObservableCollection <T> avec la liste des valeurs converties.

Comment ça marche?

Fondamentalement, ce que ConvertAll fait ici, équivaut à ceci:

List<OrderModel> orderModels = new List<OrderModel>(orders.Count); 
for (int i = 0; i < orders.Count; i++) 
{ 
    orderModels[i] = OrderModel.OrderToOrderModel(orders[i]); 
} 

Est-ce que cela répond à votre question?

+0

il répond à la question oui et non ;-) ce que fait le code, mais pas pourquoi ;-) – msfanboy

Questions connexes