Udostępnij za pośrednictwem


Implementowanie własnych operatorów dla obiektu IObservable

Możesz rozszerzyć język Rx, dodając nowe operatory dla operacji, które nie są udostępniane przez bibliotekę LINQ lub tworząc własną implementację standardowych operatorów zapytań w celu zwiększenia czytelności i wydajności. Pisanie dostosowanej wersji standardowego operatora LINQ jest przydatne, gdy chcesz obsługiwać obiekty w pamięci i gdy zamierzone dostosowanie nie wymaga kompleksowego widoku zapytania.

Tworzenie nowych operatorów

LINQ oferuje pełny zestaw operatorów, które obejmują większość możliwych operacji na zestawie jednostek. Jednak może być potrzebny operator, aby dodać określone znaczenie semantyczne do zapytania — zwłaszcza jeśli ten sam operator można ponownie użyć kilka razy w kodzie.

Wiele istniejących operatorów LINQ jest w rzeczywistości utworzonych przy użyciu innych podstawowych operatorów LINQ. Na przykład operator SelectMany jest kompilowany przez tworzenie operatorów Select and Merge, jak pokazano w poniższym kodzie.

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

Korzystając z istniejących operatorów LINQ podczas tworzenia nowego, możesz skorzystać z istniejących funkcji obsługi wydajności lub wyjątków zaimplementowanych w bibliotekach języka Rx.

Podczas pisania operatora niestandardowego dobrym rozwiązaniem jest, aby nie pozostawić żadnych nieużywanych jednorazowych; w przeciwnym razie może się okazać, że zasoby mogą zostać ujawnione, a anulowanie może nie działać poprawnie.

Dostosowywanie istniejących operatorów

Dodawanie nowych operatorów do LINQ to sposób na rozszerzenie jego możliwości. Można jednak również zwiększyć czytelność kodu, opakowując istniejących operatorów w bardziej wyspecjalizowane i znaczące.