| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.namespace System.Reactive{    /// <summary>    /// Class to create an IObserver<T> instance from delegate-based implementations of the On* methods.    /// </summary>    /// <typeparam name="T">The type of the elements in the sequence.</typeparam>    public sealed class AnonymousObserver<T> : ObserverBase<T>    {        private readonly Action<T> _onNext;        private readonly Action<Exception> _onError;        private readonly Action _onCompleted;        /// <summary>        /// Creates an observer from the specified OnNext, OnError, and OnCompleted actions.        /// </summary>        /// <param name="onNext">Observer's OnNext action implementation.</param>        /// <param name="onError">Observer's OnError action implementation.</param>        /// <param name="onCompleted">Observer's OnCompleted action implementation.</param>        /// <exception cref="ArgumentNullException"><paramref name="onNext"/> or <paramref name="onError"/> or <paramref name="onCompleted"/> is null.</exception>        public AnonymousObserver(Action<T> onNext, Action<Exception> onError, Action onCompleted)        {            if (onNext == null)                throw new ArgumentNullException("onNext");            if (onError == null)                throw new ArgumentNullException("onError");            if (onCompleted == null)                throw new ArgumentNullException("onCompleted");            _onNext = onNext;            _onError = onError;            _onCompleted = onCompleted;        }        /// <summary>        /// Creates an observer from the specified OnNext action.        /// </summary>        /// <param name="onNext">Observer's OnNext action implementation.</param>        /// <exception cref="ArgumentNullException"><paramref name="onNext"/> is null.</exception>        public AnonymousObserver(Action<T> onNext)            : this(onNext, Stubs.Throw, Stubs.Nop)        {        }        /// <summary>        /// Creates an observer from the specified OnNext and OnError actions.        /// </summary>        /// <param name="onNext">Observer's OnNext action implementation.</param>        /// <param name="onError">Observer's OnError action implementation.</param>        /// <exception cref="ArgumentNullException"><paramref name="onNext"/> or <paramref name="onError"/> is null.</exception>        public AnonymousObserver(Action<T> onNext, Action<Exception> onError)            : this(onNext, onError, Stubs.Nop)        {        }        /// <summary>        /// Creates an observer from the specified OnNext and OnCompleted actions.        /// </summary>        /// <param name="onNext">Observer's OnNext action implementation.</param>        /// <param name="onCompleted">Observer's OnCompleted action implementation.</param>        /// <exception cref="ArgumentNullException"><paramref name="onNext"/> or <paramref name="onCompleted"/> is null.</exception>        public AnonymousObserver(Action<T> onNext, Action onCompleted)            : this(onNext, Stubs.Throw, onCompleted)        {        }        /// <summary>        /// Calls the onNext action.        /// </summary>        /// <param name="value">Next element in the sequence.</param>        protected override void OnNextCore(T value)        {            _onNext(value);        }        /// <summary>        /// Calls the onError action.        /// </summary>        /// <param name="error">The error that has occurred.</param>        protected override void OnErrorCore(Exception error)        {            _onError(error);        }        /// <summary>        /// Calls the onCompleted action.        /// </summary>        protected override void OnCompletedCore()        {            _onCompleted();        }        internal IObserver<T> MakeSafe(IDisposable disposable)        {            return new AnonymousSafeObserver<T>(_onNext, _onError, _onCompleted, disposable);        }    }}
 |