Partager via


Implémentation de vos propres opérateurs pour IObservable

Vous pouvez étendre Rx en ajoutant de nouveaux opérateurs pour les opérations qui ne sont pas fournies par la bibliothèque LINQ, ou en créant votre propre implémentation d’opérateurs de requête standard pour améliorer la lisibilité et les performances. L’écriture d’une version personnalisée d’un opérateur LINQ standard est utile lorsque vous souhaitez utiliser des objets en mémoire et lorsque la personnalisation prévue ne nécessite pas une vue complète de la requête.

Création de nouveaux opérateurs

LINQ offre un ensemble complet d’opérateurs qui couvrent la plupart des opérations possibles sur un ensemble d’entités. Toutefois, vous aurez peut-être besoin d’un opérateur pour ajouter une signification sémantique particulière à votre requête, en particulier si vous pouvez réutiliser ce même opérateur plusieurs fois dans votre code.

De nombreux opérateurs LINQ existants sont en fait créés à l’aide d’autres opérateurs LINQ de base. Par exemple, l’opérateur SelectMany est créé en composant les opérateurs Select et Merge, comme le montre le code suivant.

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

En réutilisant les opérateurs LINQ existants lorsque vous en créez un nouveau, vous pouvez tirer parti des fonctionnalités existantes de gestion des performances ou des exceptions implémentées dans les bibliothèques Rx.

Lors de l’écriture d’un opérateur personnalisé, il est recommandé de ne pas laisser de jetables inutilisés; dans le cas contraire, vous constaterez peut-être que les ressources peuvent être divulguées et que l’annulation peut ne pas fonctionner correctement.

Personnalisation des opérateurs existants

L’ajout de nouveaux opérateurs à LINQ est un moyen d’étendre ses fonctionnalités. Toutefois, vous pouvez également améliorer la lisibilité du code en encapsulant les opérateurs existants dans des opérateurs plus spécialisés et plus significatifs.