У меня есть класс под названием Divisa, который расширяет IEquatable.Этот класс просто содержит поле типа string, поэтому в моем реализованном Equals of IEquatable y просто сравните эту строку.
Дело в том, что у меня есть другой класс, который содержит словарь A, когда я пытаюсь найти сохраненный ключ, который сообщаетмне, что это не выходит.
Вот код ConversorDivisas:
public class ConversorDivisas
{
private Divisa divisaBase;
private Dictionary<Divisa, double> ratiosDeCadaDivisaRespectoALaBase;
public ConversorDivisas(Divisa divisaBase)
{
this.divisaBase = divisaBase;
this.ratiosDeCadaDivisaRespectoALaBase = new Dictionary<Divisa, double>();
}
public Divisa DivisaBase
{
get
{
return this.divisaBase;
}
}
public Dictionary<Divisa, double> RatiosDeCadaDivisaRespectoALaBase
{
get
{
return this.ratiosDeCadaDivisaRespectoALaBase;
}
set
{
this.ratiosDeCadaDivisaRespectoALaBase = value;
}
}
public Boolean aniadirNuevaDivisa(Divisa divisaAAniadir, double ratio)
{
Boolean res = true;
try
{
this.ratiosDeCadaDivisaRespectoALaBase.Add(divisaAAniadir, ratio);
}
catch (ArgumentException e)
{
res = false;
}
return res;
}
public Boolean eliminarDivisa(Divisa divisaAEliminar)
{
return this.ratiosDeCadaDivisaRespectoALaBase.Remove(divisaAEliminar);
}
public Boolean cambiarRatioDivisa(Divisa divisa, double ratio)
{
Boolean res = this.ratiosDeCadaDivisaRespectoALaBase.ContainsKey(divisa);
if (res)
{
this.ratiosDeCadaDivisaRespectoALaBase.Remove(divisa);
this.ratiosDeCadaDivisaRespectoALaBase.Add(divisa, ratio);
}
return res;
}
public ICollection<Divisa> obtenerTodasLasDivisasQueTieneElConversorDeDivisas()
{
return this.ratiosDeCadaDivisaRespectoALaBase.Keys;
}
public double cambiarTantaCantidadDeUnaDivisaAOtra(double cantidad, Divisa entrada, Divisa salida)
{
double res = 0.0;
if (entrada.Equals(this.divisaBase)&&entrada.Equals(salida))
{
res = cantidad;
}
else{
if (entrada.Equals(this.divisaBase))
{
res = cantidad / this.ratiosDeCadaDivisaRespectoALaBase[salida];
}
else
{
if (salida.Equals(this.divisaBase))
{
res = cantidad * this.ratiosDeCadaDivisaRespectoALaBase[entrada];
}
else
{
res = (cantidad * this.ratiosDeCadaDivisaRespectoALaBase[entrada]) / this.ratiosDeCadaDivisaRespectoALaBase[salida];
}
}
}
return res;
}
public Boolean comprobarSiSePuedeCambiarDeUnaDivisaAOtra(Divisa entrada, Divisa salida)
{
return (this.divisaBase.Equals(entrada)||this.ratiosDeCadaDivisaRespectoALaBase.ContainsKey(entrada)) && (this.divisaBase.Equals(salida) || this.ratiosDeCadaDivisaRespectoALaBase.ContainsKey(salida));
}
public Boolean contieneLaDivisaDada(Divisa divisa)
{
return this.ratiosDeCadaDivisaRespectoALaBase.ContainsKey(divisa);
}
}
Например:
Divisa euro = new Divisa("Euro");
Divisa dolar = new Divisa("Dólar");
Divisa libra = new Divisa("Libra");
Divisa libra1 = new Divisa("Libra");
Divisa yen = new Divisa("Yen");
ConversorDivisas cd = new ConversorDivisas(euro);
cd.aniadirNuevaDivisa(dolar, 0.868614);
cd.aniadirNuevaDivisa(libra, 1.13739);
cd.aniadirNuevaDivisa(yen, 0.00764246);
Console.WriteLine(cd.RatiosDeCadaDivisaRespectoALaBase.ContainsKey(new Divisa("Libra"))); //tells false
Console.ReadLine();
Мне сказали, что вы неМне нужно реализовать IEqualityComparator в divisa и переопределить gethashcode.
введите описание изображения здесь
Я с нетерпением жду вашего ответа в ближайшее время.
BestС уважением, WaterKnight