I have an IPEndPoint a and b, whose IPAddress and Port are exactly the same, but the == operator is on the IPEndPoint not returning true. To make things even stranger, I tried to circumvent the problem by simply comparing the IPAddress and Port individually and it is STILL not returning true.
Has anyone encountered this before? If so, I am all ears to performant solutions. We have collections of as many as 10k IPEndPoints and are querying into them via LINQ (PLINQ pretty soon).
Both IPEndPoint and IPAddress don't implement the == operator. By default, the == operator compares if the two objects are the same reference, not if they represent the same value.
Use the IPAddress.Equals / IPEndPoint.Equals methods instead.
IPAddress does not define an overload for == however it does override Object.Equals, so your equality check should be:
public static bool AreEqual(IPEndpoint e1, IPEndpoint e2)
{
return e1.Port == e2.Port && e1.Address.Equals(e2.Address);
}
If you are using linq, it is probably a good idea to create your own IEqualityComparer<IPEndpoint>
to encapsulate this, since various linq methods take one to compare items.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With