我有一个IPEndPoint a和b,其IPAddress和Port完全相同,但==运算符在IPEndPoint上没有返回true。为了使事情变得更加奇怪,我试图通过简单地单独比较IPAddress和Port来避免问题,但它仍然没有返回true。
之前有没有遇到过这个?如果是这样,我全神贯注于高效的解决方案。我们有多达10k个IPEndPoints的集合,并通过LINQ(PLINQ很快)查询它们。
答案 0 :(得分:9)
IPEndPoint和IPAddress都没有实现==运算符。默认情况下,==运算符会比较两个对象是否是相同的引用,而不是它们代表相同的值。
请改用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()){
...
}
有效^^