Во-первых, почему вы используете хеш-таблицу, а не универсальный Dictionary<,>
?
Несмотря на это, ваша проблема в том, что хеш-таблица вызывает ((object)"abc").Equals(moo)
, что, конечно, возвращает false. Вы можете переопределить это поведение, передав собственную реализацию IEqualityComparer
одному из конструкторов HashTable
с параметром IEqualityComparer
.
Поскольку, как вы заметили, вы пытаетесь избежать изменения унаследованного кода, возможно, вам не удастся заменить существующую хеш-таблицу на другую, имеющую собственный IEqualityComparer. Если это правда, то я думаю, что ответ в том, что вы не можете делать то, что хотели бы.
Поскольку вы разрабатываете этот класс "moo", я предполагаю, что вы имеете контроль над кодом, который передает класс moo индексатору хеш-таблицы. Если это так, вы можете просто вызвать ToString()
для объекта, который вы передаете индексатору, и, конечно, переопределить ToString
в Moo
.