C# - القائمة العامة وطريقة Convertall () ، كيف تعمل داخليًا؟
-
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);
ماذا يحدث هنا؟
يحضر الرمز جميع الطلبات من متجر البيانات ويخزنها في قائمةu003CT> .
الرمز ينشئ مندوبًا من نوع المحولu003CTInput, TOutput> الذي يتحول من طلب واحد إلى نموذج ترتيب واحد.
يحول الرمز جميع الطلبات إلى طلب النماذج عن طريق تطبيق المحول على كل طلب.
يعيد الكود مرسالًاu003CT> مع قائمة القيم المحولة.
كيف يعمل؟
في الأساس ، ما يفعله Convertall هنا ، يعادل هذا:
List<OrderModel> orderModels = new List<OrderModel>(orders.Count);
for (int i = 0; i < orders.Count; i++)
{
orderModels[i] = OrderModel.OrderToOrderModel(orders[i]);
}
هل هذا الجواب على سؤالك؟