Nesneleri Dictionary
için anahtar olarak kullanmak istersem, bunları belirli bir şekilde karşılaştırmak için hangi yöntemleri geçersiz kılmam gerekir? Genel sözlük anahtarı olarak bir nesneyi kullanma
class Foo {
public string Name { get; set; }
public int FooID { get; set; }
// elided
}
Ve ben bir oluşturmak istiyorum:
Dictionary<Foo, List<Stuff>>
Aynı grubun dikkate alınması gereken aynı FooID
ile Foo
nesneleri istiyorum. Foo
sınıfında hangi yöntemleri geçersiz kılmam gerekiyor?
Özetlemek gerekirse: Foo
nesnelerine göre gruplandırılmış Stuff
nesnesini listelere ayırmak istiyorum. Stuff
nesneleri, kategorilerine bağlamak için FooID
olacaktır. Foo için iki Foo'nun aynı olup olmadığını karşılaştırmak için Object.GetHashCode() ve Object.Equals()
Sözlük her değer için bir karma kova hesaplamak için GetHashCode() çağırır ve Eşittir edecek geçersiz kılmak gerekir
+1 ve ben bu iş parçacığı kaçırmak istemiyorum ama GetHashCode() FooId.GetHashCode() döndürmelidir izlenim altında idi. Bu doğru kalıp değil mi? –
@Ken -, sadece gerekli özellikleri sağlayan bir int geri dönmesi gerekiyor. FooID, FooID.GetHashCode() öğesinin yanı sıra hangi FooID'yi de yapacak. Uygulama ayrıntısı olarak, Int32.GetHashCode(), "bunu döndür"; Diğer türler (dize vb.) Için evet: .GetHashCode() çok yararlı olacaktır. –
Teşekkürler! Ben IEqualityComparer ile gittim, çünkü sadece yöntemleri kullanmam gereken Dikaryoner için oldu. –
Dana