Реализация GetHashCode в классе значений
У меня есть класс Money, и я хочу знать, как лучше всего реализовать GetHashCode для этого класса значений: $1!= €1. Взвешенное значение по отношению к валюте * не сработает.
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
}
}
1 ответ
Как 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();
}
}