Anonim sınıf için GetHashCode()
uygulama oluştururken, Roslyn özellik adlarına dayanarak ilk karma değerini hesaplar. Örneğin, sınıf Adsız sınıf için GetHashCode() uygulamasında başlangıç karma değeri neden özellik adlarına bağlıdır?
var x = new { Int = 42, Text = "42" };
aşağıdaki GetHashCode()
yöntemine sahip olacak
public override in GetHashCode()
{
int hash = 339055328;
hash = hash * -1521134295 + EqualityComparer<int>.Default.GetHashCode(Int);
hash = hash * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Text);
return hash;
}
Ama biz özellik adları, başlangıç değeri değiştiğinde değiştirirseniz:
var x = new { Int2 = 42, Text2 = "42" };
public override in GetHashCode()
{
int hash = 605502342;
hash = hash * -1521134295 + EqualityComparer<int>.Default.GetHashCode(Int2);
hash = hash * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Text2);
return hash;
}
Bu davranışın arkasındaki sebep nedir? Sadece büyük [asal] numarayı seçmek ve tüm anonim sınıflar için kullanmakla ilgili bir problem var mı?
Farklı türlerde nesneler "daha" farklı olacak şekilde farklı sabitler kullanırsanız, bana göre daha yararlı görünüyor. – usr