【问题标题】:C# - generic List and ConvertAll() Method, how does it internally work?C# - 泛型 List 和 ConvertAll() 方法,它在内部是如何工作的?
【发布时间】:2010-05-09 21:51:29
【问题描述】:

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

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

FetchAllOrders 为某个客户 ID 返回一个 List&lt;Order&gt;。 此列表将转换为 List&lt;OrderModel&gt; 或换句话说 List&lt;OrderViewModel&gt;

怎么会这样? List&lt;Order&gt; 中 Order 对象的每个属性都必须转换为 OrderModel 的属性的要求/条件是什么?

【问题讨论】:

  • 我无法自拔,但使用 Chrome 浏览器时,我在主帖中写的所有文字都不会显示??所以我把剩下的贴在这里,这样上面的句子就有意义了:FetchAllOrders 为某个 customerID 返回一个 List。此列表将转换为 List 或换句话说 List
  • 我刚刚编辑了帖子以使&lt;&gt; 代码可见,使用反勾号(单击edit 时请参阅页面右侧的信息。另外检查现在是帖子的来源。

标签: c# list generics convertall


【解决方案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]);
}

这能回答你的问题吗?

【讨论】:

  • 它回答了是和否的问题 ;-) 代码在做什么,但不是为什么 ;-)
猜你喜欢
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
相关资源
最近更新 更多