diff --git a/src/Core/src/WeakEventManager.cs b/src/Core/src/WeakEventManager.cs index 8c5ea0f5e6fb..413c586f7ed9 100644 --- a/src/Core/src/WeakEventManager.cs +++ b/src/Core/src/WeakEventManager.cs @@ -137,7 +137,7 @@ void RemoveEventHandler(string eventName, object? handlerTarget, MemberInfo meth } } - struct Subscription + readonly struct Subscription : IEquatable { /// public Subscription(WeakReference? subscriber, MethodInfo handler) @@ -148,6 +148,12 @@ public Subscription(WeakReference? subscriber, MethodInfo handler) public readonly WeakReference? Subscriber; public readonly MethodInfo Handler; + + public bool Equals(Subscription other) => Subscriber == other.Subscriber && Handler == other.Handler; + + public override bool Equals(object? obj) => obj is Subscription other && Equals(other); + + public override int GetHashCode() => Subscriber?.GetHashCode() ?? 0 ^ Handler.GetHashCode(); } } }