2011-03-02 13 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と呼ばれるCLASを持っており、それが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クエリを試行している場合、それは起動していません。しかし、この場合、同じタイプの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)を[得る](// 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、はい、私はそれを忘れてしまったでしょう:) –

関連する問題