Numaralandırıcıların ve LINQ'nun nasıl çalıştığı konusunda bazı şüphelerim var. Bu iki basit seçimi düşünün:
List<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct().ToList();
veya
IEnumerable<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct();
Orijinal nesnelerimin adlarını değiştirdim, böylece bu daha genel bir örnek gibi görünecek. Sorgunun kendisi o kadar önemli değil. Sormak istediğim şu:
foreach (Animal animal in sel) { /*do stuff*/ }
IEnumerable
"Sel" hata ayıklama ve inceleme, bu durumda IEnumerable olduğunu fark edersem , bazı ilginç üyeleri vardır: "iç", "dış", "innerKeySelector" ve "dışKeySelector", bu son 2 görünür delege olmak. "İç" üyenin içinde "Hayvan" örnekleri değil, benim için çok garip olan "Türler" örnekleri vardır. "Dış" üye "Hayvan" örnekleri içerir. Sanırım iki delege hangisinin içeri girip hangisinin dışarı çıktığını belirledi?Ben "Farklı" kullanırsanız, "iç" 6 öğe içerdiğini fark (sadece 2 farklı olduğu gibi bu yanlış), ama "dış" doğru değerleri içeriyor. Yine, muhtemelen temsil edilen yöntemler bunu belirler, ancak bu IEnumerable hakkında bildiğimden biraz daha fazladır.
En önemlisi, iki seçenekten hangisi en iyi performans açısından?
Aracılığıyla şeytani Liste dönüşüm .ToList()
?
Ya da doğrudan numaralandırıcıyı mı kullanıyorsunuz?
Yapabiliyorsanız, lütfen biraz açıklayın veya IEnumerable'ın bu kullanımını açıklayan bazı bağlantılar atın.