Если у вас проблемы с горячими клавишами, попробуйте открыть Key Binding Resolver Window
с помощью Cmd +. Kbd>. Он покажет вам клавиши, которые вы нажимаете в реальном времени.
Например, Cmd + Shift + ' kbd> на самом деле является Cmd + " kbd>
Я не думаю, что есть проблема с подходом, который вы выбрали для использования. «Слишком сильное беспокойство» по поводу хеш-коллизий почти всегда указывает на то, что вы слишком сильно обдумываете проблему; до тех пор, пока хеш, скорее всего, будет другим, все будет в порядке.
В конечном итоге вы можете даже подумать об исключении Описание
из своего хеша, если разумно ожидать, что большая часть объекты времени можно различать по их названию и дате публикации (книги?).
Вы даже можете вообще не учитывать GUID в своей хэш-функции и использовать его только в реализации Equals
для устранения неоднозначности маловероятный (?) случай хеш-конфликтов.
Очень простой метод хэш-кода для настраиваемых классов - побитовое XOR для каждого хэш-кода полей вместе. Это может быть так просто:
int hash = 0;
hash ^= this.Title.GetHashCode();
hash ^= this.PublishDate.GetHashCode();
hash ^= this.Description.GetHashCode();
return hash;
Из ссылки выше :
XOR имеет следующие приятные свойства:
- Он не зависит от порядка вычислений.
- Он не «Пустые» биты. Если вы измените хотя бы один бит в одном из компонентов, окончательное значение изменится.
- Это быстро, один цикл даже на самом примитивном компьютере.
- Он сохраняет равномерное распределение. Если две части, которые вы объединяете, равномерно распределены, то и комбинация будет. Другими словами, он не стремится сжимать диапазон дайджеста в более узкую полосу.
XOR не работает хорошо, если вы ожидаете, что в ваших полях будут повторяющиеся значения, поскольку повторяющиеся значения будут уравновешивать друг друга при выполнении XOR.