<PackageReference Include="System.Reactive" Version="4.2.0-preview.625" />

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; namespace System.Reactive { public class EventPattern<TSender, TEventArgs> : IEquatable<EventPattern<TSender, TEventArgs>>, IEventPattern<TSender, TEventArgs> { public TSender Sender { get; } public TEventArgs EventArgs { get; } public EventPattern(TSender sender, TEventArgs e) { Sender = sender; EventArgs = e; } public bool Equals(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; } public override bool Equals(object obj) { return Equals(obj as EventPattern<TSender, TEventArgs>); } public override int GetHashCode() { int hashCode = EqualityComparer<TSender>.Default.GetHashCode(Sender); int hashCode2 = EqualityComparer<TEventArgs>.Default.GetHashCode(EventArgs); return (hashCode << 5) + (hashCode ^ hashCode2); } 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); } } }