C# - القائمة العامة وطريقة Convertall () ، كيف تعمل داخليًا؟

StackOverflow https://stackoverflow.com/questions/2799331

  •  04-10-2019
  •  | 
  •  

سؤال

من بعض التعليمات البرمجية التي وجدت في Sacha Barbers Free MVVM Framework Chinch رأيت هذا:

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

FetchAllOrders إرجاع أ List<Order> لبعض العميل. يتم تحويل هذه القائمة إلى أ List<OrderModel> أو بعبارة أخرى List<OrderViewModel>.

كيف يمكن أن يحدث ذلك؟ ما يجب أن يكون المتطلبات/الشروط ، أن كل خاصية لكائن الطلب في List<Order> يتم تحويله إلى خاصية OrderModel ?

هل كانت مفيدة؟

المحلول

لنجعل هذا الرمز أكثر قابلية للقراءة:

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. يحضر الرمز جميع الطلبات من متجر البيانات ويخزنها في قائمةu003CT> .

  2. الرمز ينشئ مندوبًا من نوع المحولu003CTInput, TOutput> الذي يتحول من طلب واحد إلى نموذج ترتيب واحد.

  3. يحول الرمز جميع الطلبات إلى طلب النماذج عن طريق تطبيق المحول على كل طلب.

  4. يعيد الكود مرسالًاu003CT> مع قائمة القيم المحولة.

كيف يعمل؟

في الأساس ، ما يفعله Convertall هنا ، يعادل هذا:

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

هل هذا الجواب على سؤالك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top