IPEndPoint对象无法正常工作的比较

时间:2010-05-06 17:09:50

标签: c#

我有一个IPEndPoint a和b,其IPAddress和Port完全相同,但==运算符在IPEndPoint上没有返回true。为了使事情变得更加奇怪,我试图通过简单地单独比较IPAddress和Port来避免问题,但它仍然没有返回true。

之前有没有遇到过这个?如果是这样,我全神贯注于高效的解决方案。我们有多达10k个IPEndPoints的集合,并通过LINQ(PLINQ很快)查询它们。

3 个答案:

答案 0 :(得分:9)

IPEndPointIPAddress都没有实现==运算符。默认情况下,==运算符会比较两个对象是否是相同的引用,而不是它们代表相同的值。

请改用IPAddress.Equals / IPEndPoint.Equals方法。

答案 1 :(得分:2)

IPAddress没有为==定义重载,但是它确实覆盖了Object.Equals,所以你的等式检查应该是:

public static bool AreEqual(IPEndpoint e1, IPEndpoint e2)
{
    return e1.Port == e2.Port && e1.Address.Equals(e2.Address);
}

如果你正在使用linq,最好创建一个自己的IEqualityComparer<IPEndpoint>来封装它,因为各种linq方法需要一个来比较项目。

答案 2 :(得分:0)

您可以比较HashCodes ...

IPEndPoint a = ....
IPEndPoint b = ....

if(a.GetHashCode() == b.GetHashCode()){
...
}

有效^^