2010-05-06 2 views
4

IPAddress와 Port가 정확히 같지만 == 연산자가 true를 반환하지 않는 IPEndPoint a와 b를가집니다. 사물을 낯선 것으로 만들기 위해 나는 IPAddress와 Port를 개별적으로 비교하여 문제를 회피하려고 노력했지만 여전히 true로 돌아 오지는 않습니다.IPEndPoint 개체가 작동하지 않습니다.

이전에이 문제가 발생 했습니까? 그렇다면, 나는 공연 솔루션에 대한 모든 귀입니다. 우리는 10k IPEndPoints만큼의 콜렉션을 가지고 있으며 LINQ (PLINQ 곧)를 통해 그들에게 질의하고 있습니다.

+0

나는 이것을 시도하지는 않았지만이를 확인해보십시오. [게시물] (http://stackoverflow.com/questions/1016471/how-to-compare-ip-addresses). – gooch

답변

6

IPEndPointIPAddress은 모두 == 연산자를 구현하지 않습니다. 기본적으로 == 연산자는 두 객체가 동일한 값을 나타내는 경우가 아니라 동일한 참조 인 경우를 비교합니다.

대신 IPAddress.Equals/IPEndPoint.Equals 메쏘드를 사용하십시오. 당신의 평등을 검사해야하므로

+0

그거야. 그러나 실제 참조를 확인하는 경우 Object.ReferenceEquals()를 사용한다고 생각했습니다. 감사. –

2

하여 IPAddress는, 그러나 그것은 Object.Equals을 무시 않습니다 ==에 대한 과부하를 정의하지 않습니다 : 당신은 LINQ 사용하는 경우

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

, 그것을 만드는 것이 좋습니다 아마 당신의 자신의 IEqualityComparer<IPEndpoint>을 캡슐화하면 다양한 linq 메소드가 항목을 비교하기 위해 하나를 취하기 때문에 이것을 캡슐화 할 수 있습니다.

+0

IPEndPoint는 Object.Equals도 재정의합니다. – dtb

+1

[IPEndPoint.Equals() Method] (http://msdn.microsoft.com/en-us/library/k7a45x6z.aspx)가 이미 동일한 검사를 이미 구현했기 때문에이 코드는 필요하지 않습니다. public override bool Equals (object comparand) {반환 comparand IPEndPoint && ((IPEndPoint) comparand) .m_Address.Equals (this.m_Address) && ((IPEndPoint) comparand) .m_Port == this.m_Port; }' – virious

관련 문제