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

  • ravinderosahn

    ravinderosah

    20 Temmuz 2009
  • Schmittastic Jr.

    Schmittastic

    19 Mart 2013
  • sonia989

    sonia989

    26 EKİM 2006