C# IPEndPoint对象不工作的比较
我有一个IPEndPoint a和b,它的IPAddress和Port完全相同,但是==运算符在IPEndPoint上没有返回true。为了让事情变得更奇怪,我试图通过简单地分别比较IPAddress和Port来回避这个问题,但它仍然没有返回真值 以前有人遇到过这种情况吗?如果是这样的话,我会全神贯注于性能解决方案。我们有多达10000个IPEndPoints的集合,正在通过LINQ(PLINQ很快)查询它们。两者都有,并且没有实现==运算符。默认情况下,==运算符比较两个对象是否为相同的引用,而不是它们是否表示相同的值C# IPEndPoint对象不工作的比较,c#,C#,我有一个IPEndPoint a和b,它的IPAddress和Port完全相同,但是==运算符在IPEndPoint上没有返回true。为了让事情变得更奇怪,我试图通过简单地分别比较IPAddress和Port来回避这个问题,但它仍然没有返回真值 以前有人遇到过这种情况吗?如果是这样的话,我会全神贯注于性能解决方案。我们有多达10000个IPEndPoints的集合,正在通过LINQ(PLINQ很快)查询它们。两者都有,并且没有实现==运算符。默认情况下,==运算符比较两个对象是否为相同的引用,
请改用/方法。IPAddress不为==定义重载,但它会覆盖Object.Equals,因此您的相等性检查应为:
public static bool AreEqual(IPEndpoint e1, IPEndpoint e2)
{
return e1.Port == e2.Port && e1.Address.Equals(e2.Address);
}
如果您正在使用linq,最好创建自己的
IEqualityComparer
来封装它,因为各种linq方法都需要一个来比较项目。您可以比较哈希代码
IPEndPoint a = ....
IPEndPoint b = ....
if(a.GetHashCode() == b.GetHashCode()){
...
}
它可以工作^IPEndPoint重写Object.Equals。此代码是不必要的,因为已经实现了相同的检查:
public override bool Equals(Object comparand){返回comparand是IPEndPoint&((IPEndPoint)comparand).m_Address.Equals(This.m_Address)和((IPEndPoint)comparand).m_Port==This.m_Port;}
,有效。但是,我认为如果我检查实际引用,我会使用Object.ReferenceEquals();谢谢。我没有试过这个,但请检查一下。