SORU
7 ŞUBAT 2013, PERŞEMBE


Neden IEnumerable<T>.ToList<T>() return Listesi<T> yerine IList<T>?

Uzatma yöntemi ToList() List<TSource> döndürür. Aynı desen aşağıdaki, ToDictionary() döner Dictionary<TKey, TSource>.

Bu yöntemleri IList<TSource> IDictionary<TKey, TSource> sırasıyla dönüş değerleri yazın değil neden merak ediyorum. Bu ToLookup<TSource, TKey> gerçek bir uygulama yerine bir arayüz olarak dönüş değeri tipi yüzünden daha da tuhaf görünüyor.

Bu uzatma yöntemleri dotPeek veya diğer biçimleri kullanarak kaynağına bakarak, (daha kısa olduğundan ToList() gösterilen) aşağıdaki uygulama görüyoruz:

public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source) { 
   if (source == null) throw Error.ArgumentNull("source");
   return new List<TSource>(source); 
}

Neden bu yöntem türü arabirimi belirli bir uygulama ve arayüz olarak dönüş değeri kendisi? Tek değişiklik, dönüş türü olurdu.

IEnumerable<> uzantıları bu iki olgu dışında imzalarında çok tutarlı, çünkü merak ediyorum. Ben her zaman biraz tuhaf bir düşünce.

Ayrıca, işleri daha da karmaşık hale getirmek için, documentation for ToLookup() devletler:

Bir göre bir IEnumerable bir Arama oluşturur belirtilen anahtar seçici işlevi.

ama dönüş türü ILookup<TKey, TElement>.

Edulinq Jon Skeet dönüş türü List<T> IList<T> yerine bahseder ama konuyu daha fazla temas etmez.
Kapsamlı bir aramaya cevap vermiştir, işte bu yüzden size soruyorum:

Arayüzleri olarak dönüş değerlerini yazarak değil, arkasında herhangi bir tasarım kararı var, yoksa sadece rastlantı mı?

CEVAP
7 ŞUBAT 2013, PERŞEMBE


List<T> dönen IList<T> bulunmayan List<T> Bu yöntem kolayca kullanılan avantaj. Olamaz IList<T> ile List<T> ile yapabileceğiniz bir çok şey vardır.

Buna karşılık, Lookup<TKey, TElement> ILookup<TKey, TElement> olmayan tek uygun yöntem (ApplyResultSelector) var, ve muhtemelen zaten bunu kullanarak sonuna kadar.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FF Radio

    FF Radio

    16 Mayıs 2008
  • Moodle

    Moodle

    11 Mayıs 2010
  • MrRandomSong

    MrRandomSong

    29 Kasım 2009