Pattern<TSource1, TSource2, TSource3>
Represents a join pattern over three observable sequences.
            
                namespace System.Reactive.Joins
{
    public class Pattern<TSource1, TSource2, TSource3> : Pattern
    {
        internal IObservable<TSource1> First { get; }
        internal IObservable<TSource2> Second { get; }
        internal IObservable<TSource3> Third { get; }
        internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third)
        {
            First = first;
            Second = second;
            Third = third;
        }
        public Pattern<TSource1, TSource2, TSource3, TSource4> And<TSource4>(IObservable<TSource4> other)
        {
            if (other == null)
                throw new ArgumentNullException("other");
            return new Pattern<TSource1, TSource2, TSource3, TSource4>(this.First, this.Second, this.Third, other);
        }
        public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TResult> selector)
        {
            if (selector == null)
                throw new ArgumentNullException("selector");
            return new Plan<TSource1, TSource2, TSource3, TResult>(this, selector);
        }
    }
}