Birçoğunuz gibi, geliştirme işlemini hızlandırmak için ReSharper'ı kullanıyorum. Orada kendi üyelerinden bazılarına sahip TabiiReSharper GetHashCode için neden '397' kullanılıyor?
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;
}
}
ama ne isteyen pm: Bir sınıfın eşitlik üyelerini geçersiz kılmak için kullandığınız zaman, gibi GetHashCode (için ürettiği kod-gen) görünüyor bilmek neden 397?
- DÜZENLEME: Öyleyse sorusu daha iyi ifade edilir, çünkü bu sayı dışında 397 asal sayı hakkında 'özel' bir şey var mı?
Ve 397 mutlu. Hepimiz sadece mutlu olmak istemiyor muyuz? –
Tamam, ama neden asal olmak zorunda ve neden bu büyüklükte olması gerekiyor? Eğer asal olmak zorundaysa, neden 2 veya 2147483647 değil? Güzel mutasyon elde etmek için sanırım (ve bu çarpmanın tek nedeni mutasyon) asal olmak için numaraya ihtiyacımız yok. Tercihen belirgin sayıda desen içermeyen, nispeten aynı sayıda veya sıfır olan ve çarpanı olan çoğaltıcıya ihtiyacımız var. 397 = 110001101b uyumludur. Yine de büyüklük konusunda emin değilim. –
Nick'in dediği gibi, bu konuda özellikle özel bir şey yok. Bu boyutta olması gerekmiyor, bu sadece bir sayıyı hesapladığınız zaman yeterince büyük bir sayıdır (GetHashCode() bir Int32 döndürdüğü için sonuç taşacaktır). Bir asalın seçilmesi sadece dağıtım için yararlıdır, bir matematik derecem yok, bu yüzden denemeye ve açıklamayacağım, ama bir çarpma ile çarpma diğer herhangi bir rasgele sayı ile çarpmadan daha iyi dağıtılmış bir sonuca sahip olacaktır. –