Genel Sözlük bir anahtar gibi bir nesne kullanarak .net
Eğer bir Sözlük için anahtar gibi nesneleri kullanmak istiyorsanız, yöntem ben onları belirli bir şekilde karşılaştırma yapmak için geçersiz kılmak gerekir mi?
Özellikleri olan bir sınıf var diyelim
class Foo {
public string Name { get; set;}
public int FooID {get; set;}
...
}
Ve bir oluşturmak istiyorum:
Dictionary<Foo, List<Stuff>>
Aynı FooİD ile Foo nesneleri aynı gruba kabul edilmesini istiyoruz. Hangi yöntemleri Foo sınıfta geçersiz kılmak gerekir?
Özetlemek gerekirse: listeler, Foo nesnelerin gruplandırılmış içine Şeyler nesneleri kategorize etmek istiyorum. (Şeyler, nesneler bir FooİD kendi kategorisinde bağlanması gerekir)
CEVAP
Varsayılan olarak, iki önemli yöntem GetHashCode()
Equals()
. Eğer iki şey eşit (Equals()
true değerini döndürür), karma-kodu aynı olması önemlidir. Örneğin, "FooİD;" eğer maçı olarak isterseniz GetHashCode()
olarak. geri dönemeyebilirsin Ayrıca IEquatable<Foo>
, uygulayabilirsiniz, ama bu isteğe bağlıdır:
class Foo : IEquatable<Foo> {
public string Name { get; set;}
public int FooID {get; set;}
public override int GetHashCode() {
return FooID;
}
public override bool Equals(object obj) {
return Equals(obj as Foo);
}
public bool Equals(Foo obj) {
return obj != null && obj.FooID == this.FooID;
}
}
Son olarak, başka bir alternatif de aynısını yapmak IEqualityComparer<T>
Bir sağlamaktır.
Genel bir Sözlük değeri elde anahtar?...
Anahtar olmadığını kontrol etmek için ...
Sözlük anahtar olarak özel nesne türü...
python sözlük-değeri anahtar çiftleri ...
Eğer anahtar kontrol JavaScript bir ne...