<PackageReference Include="System.Reactive" Version="4.0.0" />

Cast<TSource, TResult>

sealed class Cast<TSource, TResult> : Producer<TResult, _<TSource, TResult>>
namespace System.Reactive.Linq.ObservableImpl { internal sealed class Cast<TSource, TResult> : Producer<TResult, Cast<TSource, TResult>._> { internal sealed class _ : Sink<TResult>, IObserver<TSource> { public _(IObserver<TResult> observer, IDisposable cancel) : base(observer, cancel) { } public void OnNext(TSource value) { TResult val = default(TResult); try { val = (TResult)(object)value; } catch (Exception error) { _observer.OnError(error); base.Dispose(); return; } _observer.OnNext(val); } public void OnError(Exception error) { _observer.OnError(error); base.Dispose(); } public void OnCompleted() { _observer.OnCompleted(); base.Dispose(); } } private readonly IObservable<TSource> _source; public Cast(IObservable<TSource> source) { _source = source; } protected override _ CreateSink(IObserver<TResult> observer, IDisposable cancel) { return new _(observer, cancel); } protected override IDisposable Run(_ sink) { return ObservableExtensions.SubscribeSafe<TSource>(_source, (IObserver<TSource>)sink); } } }