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

  • fast2hell

    fast2hell

    16 AĞUSTOS 2006
  • SignatureSeries

    SignatureSer

    24 Aralık 2006
  • xdadevelopers

    xdadeveloper

    25 Aralık 2009