EventPattern<TSender, TEventArgs>
                    public class EventPattern<TSender, TEventArgs> : IEquatable<EventPattern<TSender, TEventArgs>>, IEventPattern<TSender, TEventArgs>
                
                Represents a .NET event invocation consisting of the strongly typed object that raised the event and the data that was generated by the event.
            
                using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace System.Reactive
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(0)]
    public class EventPattern<[System.Runtime.CompilerServices.Nullable(2)] TSender, [System.Runtime.CompilerServices.Nullable(2)] TEventArgs> : IEquatable<EventPattern<TSender, TEventArgs>>, IEventPattern<TSender, TEventArgs>
    {
        [System.Runtime.CompilerServices.Nullable(2)]
        [field: System.Runtime.CompilerServices.Nullable(2)]
        public TSender Sender {
            [System.Runtime.CompilerServices.NullableContext(2)]
            get;
        }
        public TEventArgs EventArgs { get; }
        public EventPattern([System.Runtime.CompilerServices.Nullable(2)] TSender sender, TEventArgs e)
        {
            Sender = sender;
            EventArgs = e;
        }
        public void Deconstruct([System.Runtime.CompilerServices.Nullable(2)] out TSender sender, out TEventArgs e)
        {
            TSender sender2 = Sender;
            TEventArgs eventArgs = EventArgs;
            sender = sender2;
            e = eventArgs;
        }
        public bool Equals([System.Runtime.CompilerServices.Nullable(new byte[] {
            2,
            1,
            1
        })] EventPattern<TSender, TEventArgs> other)
        {
            if ((object)other == null)
                return false;
            if ((object)this == other)
                return true;
            if (EqualityComparer<TSender>.Default.Equals(Sender, other.Sender))
                return EqualityComparer<TEventArgs>.Default.Equals(EventArgs, other.EventArgs);
            return false;
        }
        [System.Runtime.CompilerServices.NullableContext(2)]
        public override bool Equals(object obj)
        {
            return Equals(obj as EventPattern<TSender, TEventArgs>);
        }
        public override int GetHashCode()
        {
            TSender sender = Sender;
            int num = sender?.GetHashCode() ?? 0;
            TEventArgs eventArgs = EventArgs;
            int num2 = eventArgs?.GetHashCode() ?? 0;
            return (num << 5) + (num ^ num2);
        }
        public static bool operator ==(EventPattern<TSender, TEventArgs> first, EventPattern<TSender, TEventArgs> second)
        {
            return object.Equals(first, second);
        }
        public static bool operator !=(EventPattern<TSender, TEventArgs> first, EventPattern<TSender, TEventArgs> second)
        {
            return !object.Equals(first, second);
        }
    }
}