簡単なGetHashCode()の実装例とパフォーマンス比較
追記:Visual Studio 2017・ReSharperで自動生成できるので、もはや自動生成一択。
Generate C# Equals and GetHashCode Method Overrides - Visual Studio | Microsoft Docs
IEquatable
Method | Mean | Error | StdDev | Scaled | ScaledSD | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|
AnonymousType_GetHashCode | 23.264 ns | 1.9239 ns | 0.1087 ns | 6.18 | 0.02 | 0.0051 | 16 B |
ValueTuple_GetHashCode | 15.350 ns | 0.1826 ns | 0.0103 ns | 4.08 | 0.00 | - | 0 B |
Combine_GetHashCode | 3.764 ns | 0.0444 ns | 0.0025 ns | 1.00 | 0.00 | - | 0 B |
ValueTuple使うか直書きするかになるが、覚えやすさ・読みやすさ・間違えにくさを考えてValueTupleが使いやすいだろう。このアルゴリズムはModified Bernsteinというらしい*2。