لماذا يتم استخدام "397" لتجاوز ReSharper GetHashCode؟
-
01-07-2019 - |
سؤال
مثل العديد منكم، أستخدم ReSharper لتسريع عملية التطوير.عندما تستخدمه لتجاوز أعضاء المساواة في الفصل، فإن الكود البرمجي الذي ينتجه لـ GetHashCode() يبدو كما يلي:
public override int GetHashCode()
{
unchecked
{
int result = (Key != null ? Key.GetHashCode() : 0);
result = (result * 397) ^ (EditableProperty != null ? EditableProperty.GetHashCode() : 0);
result = (result * 397) ^ ObjectId;
return result;
}
}
بالطبع لدي بعض أعضائي هناك، لكن ما أريد معرفته هو لماذا 397؟
- يحرر:لذا فإن سؤالي سيكون أفضل صياغته على النحو التالي: هل هناك شيء "خاص" بشأن العدد الأولي 397 خارجه باعتباره عددًا أوليًا؟
المحلول
ربما لأن 397 هو عدد أولي ذو حجم كافٍ لتجاوز متغير النتيجة وخلط أجزاء التجزئة إلى حد ما، مما يوفر توزيعًا أفضل لرموز التجزئة.لا يوجد شيء مميز في العدد 397 يميزه عن الأعداد الأولية الأخرى التي لها نفس المقدار.
لا تنتمي إلى StackOverflow