Skip to content

Commit b3de619

Browse files
authored
[Blazor] Better implementation of EventCallback.Equals #53361 (#53395)
1 parent 48cdf1d commit b3de619

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

src/Components/Components/src/EventCallback.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,5 @@ public override int GetHashCode()
8080
public override bool Equals(object? obj)
8181
=> obj is EventCallback other
8282
&& ReferenceEquals(Receiver, other.Receiver)
83-
&& ReferenceEquals(Delegate, other.Delegate);
83+
&& (Delegate?.Equals(other.Delegate) ?? (other.Delegate == null));
8484
}

src/Components/Components/src/EventCallbackOfT.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,5 @@ public override int GetHashCode()
8080
public override bool Equals(object? obj)
8181
=> obj is EventCallback<TValue> other
8282
&& ReferenceEquals(Receiver, other.Receiver)
83-
&& ReferenceEquals(Delegate, other.Delegate);
83+
&& (Delegate?.Equals(other.Delegate) ?? (other.Delegate == null));
8484
}

src/Components/Components/test/EventCallbackTest.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,24 @@ await Assert.ThrowsAsync<ArgumentException>(() =>
271271
});
272272
}
273273

274+
[Fact]
275+
public void EventCallbackOf_Equals_WhenANewDelegateIsCreated()
276+
{
277+
// Arrange
278+
var component = new EventCountingComponent();
279+
280+
var delegate_1 = (EventArgs _) => { };
281+
var delegate_2 = (MulticastDelegate)MulticastDelegate.CreateDelegate(typeof(Action<EventArgs>), delegate_1.Target, delegate_1.Method);
282+
var eventcallback_1 = new EventCallback(component, delegate_1);
283+
var eventcallback_2 = new EventCallback(component, delegate_2);
284+
285+
// Act
286+
var result = eventcallback_1.Equals(eventcallback_2);
287+
288+
// Assert
289+
Assert.True(result);
290+
}
291+
274292
[Fact]
275293
public async Task EventCallbackOfT_Action_Null()
276294
{
@@ -415,6 +433,24 @@ public async Task EventCallbackOfT_FuncTTask_Arg()
415433
Assert.Equal(1, component.Count);
416434
}
417435

436+
[Fact]
437+
public void EventCallbackOfT_Equals_WhenANewDelegateIsCreated()
438+
{
439+
// Arrange
440+
var component = new EventCountingComponent();
441+
442+
var delegate_1 = (EventArgs _) => { };
443+
var delegate_2 = (MulticastDelegate)MulticastDelegate.CreateDelegate(typeof(Action<EventArgs>), delegate_1.Target, delegate_1.Method);
444+
var eventcallback_1 = new EventCallback<EventArgs>(component, delegate_1);
445+
var eventcallback_2 = new EventCallback<EventArgs>(component, delegate_2);
446+
447+
// Act
448+
var result = eventcallback_1.Equals(eventcallback_2);
449+
450+
// Assert
451+
Assert.True(result);
452+
}
453+
418454
private class EventCountingComponent : IComponent, IHandleEvent
419455
{
420456
public int Count;

0 commit comments

Comments
 (0)