2012-02-15 16 views
0

私はクラスMoneyを持っていますが、この値クラスでGetHashCodeを実装する最良の方法が$ 1!= = 1になることを知りたいと思います。通貨*の値に対して重み付けされた値を持つことは機能しません。値クラスでGetHashCodeを実装する

public class Money : System.IEquatable<Money> 
{  
    public Money(Currency c, decimal val) 
    { 
     this.Currency = c; 
     this.Value = val; 
    } 

    public Currency Currency 
    { 
     get; 
     protected set; 
    } 

    public decimal Value 
    { 
     get; 
     protected set; 
    } 

    public override bool Equals(object obj) 
    { 
     Money m = obj as Money; 

     if (m == null){throw new System.ArgumentNullException("m");} 

     if(m.Currency.Id == this.Currency.Id) 
     { 
      if(m.Value == this.Value) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public override int GetHashCode() 
    { 
     // What would be the best way of implementing this as €1 != $1 
     // Currency object contains 2 members, (int) Id and (string) symbol 
    } 
} 
+0

この回答は役に立ちましたか? – nulltoken

答えて

0

Currency.Idがユニークと思われるように、それが非ゼロinteger私は

public override int GetHashCode() 
{ 
    unchecked 
    { 
     return (Currency.Id*397)^Value.GetHashCode(); 
    } 
} 

Currency.Idでいいと思うのです提供され、空でないstringまたはGuid、トリックを行うだろう、次の

public override int GetHashCode() 
{ 
    unchecked 
    { 
     return (Currency.Id.GetHashCode()*397)^Value.GetHashCode(); 
    } 
} 
関連する問題