SORU
11 Mart 2009, ÇARŞAMBA


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
11 Mart 2009, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BroadCity

    BroadCity

    10 ŞUBAT 2010
  • Leigh Momii

    Leigh Momii

    10 Mayıs 2006
  • The Pet Collective

    The Pet Coll

    5 Ocak 2012