2010-05-09 12 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

相關問題