diff --git a/src/Components/Components/src/EventCallback.cs b/src/Components/Components/src/EventCallback.cs index 07efd535c082..cc4a63bacf4b 100644 --- a/src/Components/Components/src/EventCallback.cs +++ b/src/Components/Components/src/EventCallback.cs @@ -80,5 +80,5 @@ public override int GetHashCode() public override bool Equals(object? obj) => obj is EventCallback other && ReferenceEquals(Receiver, other.Receiver) - && ReferenceEquals(Delegate, other.Delegate); + && (Delegate?.Equals(other.Delegate) ?? (other.Delegate == null)); } diff --git a/src/Components/Components/src/EventCallbackOfT.cs b/src/Components/Components/src/EventCallbackOfT.cs index e22317d9114f..f2c84c942646 100644 --- a/src/Components/Components/src/EventCallbackOfT.cs +++ b/src/Components/Components/src/EventCallbackOfT.cs @@ -80,5 +80,5 @@ public override int GetHashCode() public override bool Equals(object? obj) => obj is EventCallback other && ReferenceEquals(Receiver, other.Receiver) - && ReferenceEquals(Delegate, other.Delegate); + && (Delegate?.Equals(other.Delegate) ?? (other.Delegate == null)); } diff --git a/src/Components/Components/test/EventCallbackTest.cs b/src/Components/Components/test/EventCallbackTest.cs index faa6909d04ca..89fc904b72ac 100644 --- a/src/Components/Components/test/EventCallbackTest.cs +++ b/src/Components/Components/test/EventCallbackTest.cs @@ -271,6 +271,24 @@ await Assert.ThrowsAsync(() => }); } + [Fact] + public void EventCallbackOf_Equals_WhenANewDelegateIsCreated() + { + // Arrange + var component = new EventCountingComponent(); + + var delegate_1 = (EventArgs _) => { }; + var delegate_2 = (MulticastDelegate)MulticastDelegate.CreateDelegate(typeof(Action), delegate_1.Target, delegate_1.Method); + var eventcallback_1 = new EventCallback(component, delegate_1); + var eventcallback_2 = new EventCallback(component, delegate_2); + + // Act + var result = eventcallback_1.Equals(eventcallback_2); + + // Assert + Assert.True(result); + } + [Fact] public async Task EventCallbackOfT_Action_Null() { @@ -415,6 +433,24 @@ public async Task EventCallbackOfT_FuncTTask_Arg() Assert.Equal(1, component.Count); } + [Fact] + public void EventCallbackOfT_Equals_WhenANewDelegateIsCreated() + { + // Arrange + var component = new EventCountingComponent(); + + var delegate_1 = (EventArgs _) => { }; + var delegate_2 = (MulticastDelegate)MulticastDelegate.CreateDelegate(typeof(Action), delegate_1.Target, delegate_1.Method); + var eventcallback_1 = new EventCallback(component, delegate_1); + var eventcallback_2 = new EventCallback(component, delegate_2); + + // Act + var result = eventcallback_1.Equals(eventcallback_2); + + // Assert + Assert.True(result); + } + private class EventCountingComponent : IComponent, IHandleEvent { public int Count;