Реализация собственных операторов для 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 — это способ расширить его возможности. Однако вы также можете улучшить удобочитаемость кода, упаковав существующие операторы в более специализированные и значимые.