Правильно ли я реализовал Equals () / GetHashCode ()?

Программа работала с этой реализацией:

class Instrument
{
    public string ClassCode { get; set; }
    public string Ticker { get; set; }
    public override string ToString()
    {
        return " ClassCode: " + ClassCode + " Ticker: " + Ticker + '.';
    }
}

Но поскольку мне нужно использовать инструмент в словаре, я решил реализовать 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))

Возможно ли, что некоторые части кода предполагают, что равенство и хэш-код НЕ реализован? Или я просто неправильно их реализовал? Извините, я не знаком с такими расширенными функциями C #, как последний фрагмент кода, и не знаю, как он связан с equals или hashCode.

8
задан abatishchev 18 April 2011 в 08:12
поделиться