Обновить

Комментарии 9

Я прошёл этот путь, Гэндальф, он был тернист и запутан. Было бы намного проще, если бы в начале статьи был небольшой его план.

Но сама находка любопытная, насколько, оказывается, легко выстрелить себе в ногу в, казалось, управляемом языке, который разработан специально, чтобы не стрелять себе в ногу

Так управляемость - это про работу с памятью (чтобы та не текла, чтобы автоматически собирался мусор), а не про некорректное использование API.

Вопрос скорее в том, почему Microslop не заостряют внимание на том, что если хочешь пихать свои типы в словарь в качестве ключей, важно переопределять GetHashCode и Equals. Единственное, что я нашёл, это вот эту скромную заметку:

The speed of retrieval depends on the quality of the hashing algorithm of the type specified for TKey.

https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?view=net-10.0#remarks

Всё отлично задокументировано https://learn.microsoft.com/en-us/dotnet/api/system.valuetype.gethashcode?view=net-10.0#remarks прямым текстом. Объективно, классы и рекорды (в том числе структурные) не подвержены этому. А если вы зачем-то начали писать свою структуру, то нужно понимать нюансы.

А если вы зачем-то начали писать свою структуру, то нужно понимать нюансы.

Вот об этих нюансах и должно быть написано в справке о словаре.

Во всех апи которые могут вызвать GetHashCode надо это писать?

Нет.

То есть вы намеренно допустили ошибку не переопределив equals и gethashcode и сделали замеры тестами посмотреть насколько она серьезная?

Что общего у хабра и пикабу? :)

Но это же буквально база. Я раньше студентам по приколу рассказывал о устройстве словарей и такое спрашивали на собесах на мидла…

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации