SORU
19 AĞUSTOS 2009, ÇARŞAMBA


() Farklı lambda ile?

Doğru, yani bir sayısız var ve farklı değerleri almak istiyoruz.

System.Linq, orada kullanarak tabii bir uzantısı yöntemi Distinct deniyor. Basit durumda, herhangi bir parametre ile kullanılabilir:

var distinctValues = myStringList.Distinct();

İyi ve güzel, ama eğer kendisi için eşitlik belirtmek istiyorum objeler sayısız varsa, yalnızca aşırı

var distinctValues = myCustomerList.Distinct(someEqualityComparer);

Eşitlik karşılaştırıcısı bağımsız IEqualityComparer<T> bir örnek olmalıdır. Bu, tabii ki yapabilirim, ama biraz ayrıntılı ve cludgy.

Beklediğim gibi bir lambda, bir İşlev<T, T, bool> söylemek sürecek bir aşırı yüklenme;:

var distinctValues
    = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);

Eğer bazı tür uzantısı varsa veya bazı eşdeğer çözüm? Ya da ben bir şey eksik?

, IEqualityComparer bir satır içi (beni utandırmak) belirten bir yolu var alternatif olarak?

Güncelleme

Bu konuda bir MSDN forumda Anders post Bir Hejlsberg tarafından bir cevap buldum. O diyor ki:

İçine çalıştırmak için gidiyoruz sorunu ne zaman iki nesne karşılaştırmak. aynı GetHashCode dönüş değeri olmalı eşit (veya başka karma tablo DAHİLİ olarak Farklı tarafından kullanılan düzgün). Uyumlu paketlerin çünkü IEqualityComparer kullanıyoruz tek bir arayüz içine Equals ve GetHashCode uygulamaları.

Mantıklı.. bu sanırım

CEVAP
11 Kasım 2010, PERŞEMBE


IEnumerable<Customer> filteredList = originalList
  .GroupBy(customer => customer.CustomerId)
  .Select(group => group.First());

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • arnejann

    arnejann

    3 Kasım 2007
  • jcortes187

    jcortes187

    24 Mart 2006