Поделиться через


Реализация собственных операторов для IObservable

Вы можете расширить Rx, добавив новые операторы для операций, которые не предоставляются библиотекой LINQ, или создав собственную реализацию стандартных операторов запросов для повышения удобочитаемости и производительности. Написание настраиваемой версии стандартного оператора LINQ полезно, если требуется работать с объектами в памяти и когда для предполагаемой настройки не требуется полное представление запроса.

Создание новых операторов

LINQ предлагает полный набор операторов, охватывающих большинство возможных операций с набором сущностей. Однако для добавления определенного семантического значения в запрос может потребоваться оператор , особенно если этот же оператор можно использовать несколько раз в коде.

Многие существующие операторы LINQ фактически созданы с помощью других базовых операторов LINQ. Например, оператор SelectMany создается путем создания операторов Select и Merge, как показано в следующем коде.

public static IObservable<TResult> SelectMany<TSource, TResult>( this IObservable<TSource> source, Func<TSource, IObservable<TResult>> selector) 
{ 
   return source.Select(selector).Merge(); 
} 
In t

Повторно используя существующие операторы LINQ при создании нового оператора, вы можете воспользоваться существующими возможностями производительности или обработки исключений, реализованными в библиотеках Rx.

При написании пользовательского оператора рекомендуется не оставлять ненужные удаленные компоненты. В противном случае может возникнуть утечка ресурсов, а отмена может работать неправильно.

Настройка существующих операторов

Добавление новых операторов в LINQ — это способ расширить его возможности. Однако вы также можете улучшить удобочитаемость кода, упаковав существующие операторы в более специализированные и значимые.