2011-03-02 71 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; 
     } 
    }** 

我有一個名爲CLAS和HostCode它包含2種重載方法(一作「==」,另一個是「!=」) 我開了如下主機代碼的集合。

 **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;*** 

當我嘗試像上面那樣,在HostCode類中觸發相應的運算符方法(在本例中爲'==')。所以我可以在那裏寫我的自定義邏輯。

但是,如果IAM嘗試與下面的Linq查詢,它不會觸發。但在這種情況下,Iam也會比較兩個具有相同類型的對象。

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

任何人都可以請幫助我找出一種方法,我可以通過Linq查詢比較2個對象嗎?

+0

去這裏的答案 - HTTP:/ /stackoverflow.com – jjnguy

+0

hc從哪裏來 – msarchet

回答

0

由於您的問題是「我應該怎麼比較他們這個工作」我會回答「你應該超載和使用.Equals()代替==

而且隨着!=你超負荷的定義是什麼?

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。如果[贏得](// meta.stackoverflow.com/q/146472/169503)足夠[聲望](// stackoverflow.com/help/whats-reputation),您將能夠[對任何帖子發表評論](/ /stackoverflow.com/help/privileges/comment)。 – FrankerZ

+0

正如我所說,「因爲你的問題是'我應該如何比較它們的工作'我會回答'你應該重載和使用.Equals()而不是=='」,但這個(古代)的問題是jabberwocky –

1

您可以使用IEqualityComparer或覆蓋equals用於此目的。

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是當你有對象,並在等含有......你想使用一些特定的平等某些功能的一些平等:

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,是的,我忘記了:) –