Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IPEndPoint对象不工作的比较_C# - Fatal编程技术网

C# IPEndPoint对象不工作的比较

C# IPEndPoint对象不工作的比较,c#,C#,我有一个IPEndPoint a和b,它的IPAddress和Port完全相同,但是==运算符在IPEndPoint上没有返回true。为了让事情变得更奇怪,我试图通过简单地分别比较IPAddress和Port来回避这个问题,但它仍然没有返回真值 以前有人遇到过这种情况吗?如果是这样的话,我会全神贯注于性能解决方案。我们有多达10000个IPEndPoints的集合,正在通过LINQ(PLINQ很快)查询它们。两者都有,并且没有实现==运算符。默认情况下,==运算符比较两个对象是否为相同的引用,

我有一个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();谢谢。我没有试过这个,但请检查一下。