2011-03-02 9 views
0

다음과 같은 방법으로 연산자를 오버로드하면 C# 코드에서 완벽하게 작동합니다. **Linq 쿼리에서 연산자 오버로드가 발생했습니다.

public class HostCode 
    { 
     public string Code { get; set; } 
     public string Name { get; set; } 
     public static bool operator ==(HostCode hc1, HostCode hc2) 
     { 
      return hc1.Code == hc2.Code; 
     } 
     public static bool operator !=(HostCode hc1, HostCode hc2) 
     { 
      return true; 
     } 
    }** 

난 HostCode라는 CLA를 있고 이는 2 오버 방법 (용 '=='를위한 것이고 다른 하나는 '! =') 포함하고, I는 다음 호스트 코드의 집합을 만들어 .

 **var hostCodes = new List<HostCode>() 
     { 
      new HostCode(){ Code = "1", Name = "sreekanth" }, 
      new HostCode(){ Code = "2", Name = "sajan" }, 
      new HostCode(){ Code = "3", Name = "mathew" }, 
      new HostCode(){ Code = "4", Name = "sachin" } 
     };** 

     ***var hc = new HostCode() { Code = "1", Name = "sreekanth" };*** 

     ***var isEq = hostCodes[1] == hc;*** 

하는 I 위에서처럼 애 쓰고 때 HostCode 클래스 소성 각 조작 방법 (이 경우에는 "=="이다). 그래서 내가 거기에 내 사용자 지정 논리를 쓸 수 있습니다.

그러나 Iam이 아래와 같이 Linq 쿼리를 시도하면 실행되지 않습니다. 그러나이 경우에도 동일한 유형의 객체 2 개를 비교합니다.

**var isEqual = from obj in hostCodes where (HostCode)obj == (HostCode)hc select obj;** 

아무도 내가 Linq 쿼리에 의해 2 개체를 비교할 수있는 방법을 찾을 수 있습니까? "어떻게 일이 그들을 비교해야한다"질문부터

+0

당신의 대답을 여기로 이동 : 당신이 개체에 그리고 ... 당신은 어떤 특정 평등을 사용하려는 비 포함와 같은 일부 기능에 약간의 평등이있을 때

public class HostCode { .... public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; return obj as HostCode == null ? false : (obj as HostCode).Code == Code; } } 

그리고 IEqualityComparer 사용법은 – jjnguy

+0

여기서 hc는 – msarchet

답변

0

입니다 내가 대답 것이다 "당신은 과부하 .Equals() 대신 ==의 사용한다"

그리고 != 당신의 과부하 정의와 함께 무엇입니까?

+0

에서 비롯됩니다.이 질문에 대한 대답은 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. 충분한 [평판] (// stackoverflow.com/help/whats-reputation)으로 [earn] (// meta.stackoverflow.com/q/146472/169503)하면 [모든 게시물에 댓글을 달 수 있습니다] (/ /stackoverflow.com/help/privileges/comment). – FrankerZ

+0

내가 말했듯이 "당신의 질문이 '이 질문을'나는 어떻게 대답해야합니까? '라고 대답했기 때문에 =='대신에 .Equals()를 사용하고 오버로드해야하지만, (고대의) 질문은 jabberwocky입니다. –

1

IEqualityComparer을 사용하거나 equals을 재정의 할 수 있습니다./: - HTTP

public class EqualityComparer : IEqualityComparer<HostCode > 
{ 

    public bool Equals(HostCode x, HostCode y) 
    { 
     return y.ID == x.ID; 
    } 

    public int GetHashCode(string obj) 
    { 
     return obj.GetHashCode(); 
    } 
} 
+0

** 그리고'GetHashCode'를 오버라이드하십시오! ** – SLaks

+0

@SLaks 예, 잊어 버렸습니다. :) –

관련 문제