C# - универсальный Список и ConvertAll () Метод, как это внутренне работает?

из некоторого кода я нашел в Парикмахерах Sacha свободного mvvm клопа платформы, я видел это:

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

FetchAllOrders возвраты a List<Order> для определенного customerID. Этот список преобразовывается в a List<OrderModel> или другими словами List<OrderViewModel>.

Как это может произойти? Каковы должны быть требования/условия, что каждое свойство Порядка возражает в List<Order> преобразовывается в свойство OrderModel ?

1
задан Anthony Pegram 9 May 2010 в 21:56
поделиться

1 ответ

Давайте сделаем этот код более читаемым:

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

Что здесь происходит?

  1. Код извлекает все заказы из хранилища данных и сохраняет их в List .

  2. Код создает делегат типа Converter , который преобразует одиночный Order в одиночный OrderModel.

  3. Код преобразует все заказы в модели заказов, применяя преобразователь к каждому заказу.

  4. Код возвращает DispatcherNotifiedObservableCollection со списком преобразованных значений.

Как это работает?

По сути, то, что здесь делает ConvertAll, эквивалентно следующему:

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

Это ответ на ваш вопрос?

2
ответ дан 3 September 2019 в 00:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: