Re[11]: Observable computations
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.11.19 16:42
Оценка:
Здравствуйте, igor-booch, Вы писали:

IB>Перевожу на linq-2-objects дополнив примером из реальной жизни:

IB>
IB>IEnumerable<Order> filteredOrders =  orders.Where(o => 
IB>    selectedOrderTypes.Contains(
IB>        o.Type))
IB>


IB>Вот OC верcия:

IB>
IB>ObservableCollection<Order> filteredOrders =  orders.Filtering(o => 
IB>    selectedOrderTypes.ContainsComputing<OrderType>(
IB>        Expr.Is(() => o.Type).Computing()).Value);
IB>



IB>selectedOrderTypes тоже должна быть ObservableCollection<OrderType>. Order должен реализовать INotifyPropertyChanged.

IB>Далее можно менять selectedOrderTypes (add, remove), можно менять свойство Type у любого Order, можно менять коллекцию orders:
IB>filteredOrders всегда будет содержать свежий результат.

IB>Заметь что, в ContainsComputing аргумент o.Type передаётся не как значение (как в случае linq-2-objects), а как OC вычисление. (Похоже как передача аргументов по значению и по ссылке.) Это нужно чтобы во вложенном вычислении отслеживалось значение свойства Order.Type. Вот тебе ещё одна причина почему нельзя так просто использовать перегруженные linq-2-objects методы, как ты предлагал.


Ага, интересно. Гляну на устройство ContainsComputing и как вообще это всё работает.
Магия задействована очень могучая, смущает, конечно, громоздкость синтаксиса. Не за то наши деды воевали, чтобы мы писали Expr.Is(() => o.Type).Computing().Value
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.