プログラムはこの実装で動作していました:
class Instrument
{
public string ClassCode { get; set; }
public string Ticker { get; set; }
public override string ToString()
{
return " ClassCode: " + ClassCode + " Ticker: " + Ticker + '.';
}
}
しかし、辞書でInstrumentを使用する必要があるため、equals/hashcodeを実装することにしました。
class Instrument
{
public string ClassCode { get; set; }
public string Ticker { get; set; }
public override string ToString()
{
return " ClassCode: " + ClassCode + " Ticker: " + Ticker + '.';
}
public override bool Equals(object obj)
{
if (obj == null)
return false;
Instrument instrument = obj as Instrument;
if (instrument == null)
return false;
return ((ClassCode.Equals(instrument.ClassCode)) && (Ticker.Equals(instrument.Ticker));
}
public override int GetHashCode()
{
int hash = 13;
hash = (hash * 7) + ClassCode.GetHashCode();
hash = (hash * 7) + Ticker.GetHashCode();
return hash;
}
}
これで、プログラムは動作を停止しました。そのような場所または同様の場所で、「KeyNotFoundException」を受け取ります。
if (cache.Keys.Any(instrument => instrument.Ticker == newTicker && instrument.ClassCode == newClassCode))
コードの一部がequalsを想定していて、ハッシュコードが実装されていない可能性はありますか?それとも私はそれらを間違って実装したのでしょうか?申し訳ありませんが、コードの最後の部分のようなC#の高度な機能に精通しておらず、equalsまたはhashCodeとどのように接続されているのかわかりません。