2010-05-09 1 views
1

из некоторого кода я нашел в Sacha парикмахеры рамочного бесплатно MVVM клопа Я видел это:C# - общий метод List и ConvertAll(), как он работает внутри?

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

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

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

+0

Я не могу помочь себе, но с браузером Chrome не весь текст, который я написал в главном сообщении, отображается ?? Поэтому я вставляю сюда остальные, поэтому предложение выше имеет смысл: FetchAllOrders возвращает список для определенного идентификатора клиента. Этот список преобразуется в список или другими словами List . – msfanboy

+0

Я только что отредактировал сообщение, чтобы сделать код '<> 'видимым, используйте обратный тик (см. Информацию в правой части страницы, когда вы нажимаете« edit ». Также проверьте источник сообщения сейчас. – ChrisF

ответ

2

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

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. код извлекает все заказы из хранилища данных и сохраняет их в списке <T>.

  2. Код создает делегат типа Преобразователь < TInput, TOutput >, который преобразует из одного заказа в один OrderModel.

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

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

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

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

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

, что ответить на ваш вопрос?

+0

отвечает на вопрос «да» и «нет» ;-), что делает код, но не почему ;-) – msfanboy

 Смежные вопросы

  • Нет связанных вопросов^_^