Re[10]: Observable computations
От: igor-booch Россия  
Дата: 19.11.19 13:39
Оценка: 76 (1)
S>А его можно инициализировать не только ObservableCollection, но и произвольным результатом linq-2-observable, который сам порождает события с учётом критериев отбора/проекции и прочего.
Так и есть.


IB>>Кроме 2 указателей, у меня в каждом OC вычислении ещё полно потрохов. Ситуация по памяти может значительно ухудшиться, если присутствует параметрозависимое вложенное вычисление, например


IB>>
IB>>sourceCollection1.Filtering(sc1i => sourceCollection2.ContainsComputing(sc1i).Value)
IB>>


IB>>Здесь на каждый элемент коллекции sourceCollection1 будет создаваться отдельное вычисление ContainsComputing.

S>А можете поподробнее объяснить, что значит эта строчка кода? Что такое ContainsComputing и вообще смысл такого Filtering?

Перевожу на linq-2-objects дополнив примером из реальной жизни:
IEnumerable<Order> filteredOrders =  orders.Where(o => 
    selectedOrderTypes.Contains(
        o.Type))


Вот OC верcия:
ObservableCollection<Order> filteredOrders =  orders.Filtering(o => 
    selectedOrderTypes.ContainsComputing<OrderType>(
        Expr.Is(() => o.Type).Computing()).Value);



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

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

Expr.Is просто возвращает выражение переданное ему в аргументе. Иначе в C# не прицепить экстеншен метод к выражению.
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания
http://rsdn.ru/Info/rules.xml
Отредактировано 19.11.2019 15:01 igor-booch . Предыдущая версия . Еще …
Отредактировано 19.11.2019 14:56 igor-booch . Предыдущая версия .
Отредактировано 19.11.2019 14:35 igor-booch . Предыдущая версия .
Отредактировано 19.11.2019 14:31 igor-booch . Предыдущая версия .
Отредактировано 19.11.2019 14:24 igor-booch . Предыдущая версия .
Отредактировано 19.11.2019 14:19 igor-booch . Предыдущая версия .
Отредактировано 19.11.2019 14:16 igor-booch . Предыдущая версия .
Отредактировано 19.11.2019 14:07 igor-booch . Предыдущая версия .
Отредактировано 19.11.2019 14:04 igor-booch . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.