1

从我在 Sacha Barbers free mvvm framework chinch 中找到的一些代码中,我看到了这个:

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

FetchAllOrdersList<Order>为某个 customerID返回一个。这个列表被转换为一个List<OrderModel>或换句话说List<OrderViewModel>

怎么会这样?必须是什么要求/条件,才能将 Order 对象的每个属性List<Order>转换为 的属性OrderModel

4

1 回答 1

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. 代码从数据存储中获取所有订单并将它们存储在 List<T> 中。

  2. 该代码创建一个类型为 Converter<TInput, TOutput> 的委托,该委托将单个 Order 转换为单个 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]);
}

这是否回答你的问题?

于 2010-05-09T22:48:29.773 回答