2010-05-09 18 views
1

从一些代码,我在理发萨沙免费MVVM框架臭虫发现我看到这个:C# - 通用列表和ConvertAll()方法,它如何在内部工作?

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

FetchAllOrders一定的customerID返回List<Order>。 此列表转换为List<OrderModel>或换句话说List<OrderViewModel>

这怎么会发生?必须是什么要求/条件,List<Order>中的Order对象的每个属性都转换为OrderModel的属性?

+0

我不能帮助自己,但与Chrome浏览器不是我在主帖中写的所有文本显示??所以我在这里粘贴其余的句子,所以上面的句子是有道理的: FetchAllOrders返回一个列表对于某个customerID。 此列表转换为列表或换句话说列表。 – msfanboy 2010-05-09 21:54:13

+0

我刚刚编辑过文章,让'<>'代码可见,请使用后面的勾号(点击'edit'时查看页面右侧的信息。同时检查帖子的来源。 – ChrisF 2010-05-09 21:56:07

回答

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 <牛逼>从数据存储和存储他们所有的订单。

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

是否回答你的问题?

+0

它回答的问题是和不; ;-)代码在做什么,但不是为什么;-) – msfanboy 2010-05-15 21:30:37