2011-03-02 42 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,是的,我忘记了:) –