Saya memiliki keraguan tentang bagaimana Enumerator bekerja, dan LINQ. Pertimbangkan dua pilihan sederhana ini:
List<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct().ToList();
atau
IEnumerable<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct();
Saya mengubah nama-nama objek asli saya sehingga ini terlihat seperti contoh yang lebih umum. Permintaan itu sendiri tidak begitu penting. Yang ingin saya tanyakan adalah ini:
foreach (Animal animal in sel) { /*do stuff*/ }
Saya perhatikan bahwa jika saya menggunakan
IEnumerable
, ketika saya men-debug dan memeriksa "sel", yang dalam hal ini adalah IEnumerable, ia memiliki beberapa anggota yang menarik: "dalam", "luar", "innerKeySelector" dan "outerKeySelector", 2 terakhir ini muncul menjadi delegasi. Anggota "batin" tidak memiliki instance "Hewan" di dalamnya, melainkan instance "Spesies", yang sangat aneh bagi saya. Anggota "luar" memang mengandung instance "Hewan". Saya berasumsi bahwa kedua delegasi menentukan mana yang masuk dan apa yang keluar dari sana?Saya perhatikan bahwa jika saya menggunakan "Distinct", "inner" berisi 6 item (ini tidak benar karena hanya 2 yang Distinct), tetapi "outer" memang mengandung nilai yang benar. Sekali lagi, mungkin metode yang didelegasikan menentukan ini, tetapi ini sedikit lebih dari yang saya tahu tentang IEnumerable.
Yang paling penting, yang mana dari dua opsi ini yang terbaik untuk kinerja?
Konversi daftar jahat melalui .ToList()
?
Atau mungkin menggunakan enumerator secara langsung?
Jika Anda bisa, tolong jelaskan juga sedikit atau lempar beberapa tautan yang menjelaskan penggunaan IEnumerable ini.