EnumeratorsとLINQの動作に疑問があります。次の2つの単純な選択を検討してください。
List<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct().ToList();
または
IEnumerable<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct();
これがより一般的な例のように見えるように、元のオブジェクトの名前を変更しました。クエリ自体はそれほど重要ではありません。私が聞きたいのはこれです:
foreach (Animal animal in sel) { /*do stuff*/ }
私がを使用すると
IEnumerable
、 "sel"(この場合はIEnumerable)をデバッグして検査すると、いくつかの興味深いメンバーが含まれていることに気付きました: "inner"、 "outer"、 "innerKeySelector"、 "outerKeySelector"、これらの最後の2つが表示されます代議員になる。「inner」メンバーには「Animal」インスタンスは含まれず、「Species」インスタンスが含まれています。これは私にとって非常に奇妙でした。「外部」メンバーには「動物」インスタンスが含まれています。私は、2人の代表がどちらが出入りするかを決定すると思いますか?「Distinct」を使用した場合、「inner」には6つの項目が含まれていることに気付きました(2つだけが異なるため、これは正しくありません)が、「outer」には正しい値が含まれています。繰り返しになりますが、おそらく委任されたメソッドがこれを決定しますが、これはIEnumerableについて私が知っているよりも少し多くなります。
最も重要なのは、2つのオプションのどちらがパフォーマンスに関して最良であるかです。
経由悪リスト変換.ToList()
?
または、列挙子を直接使用しますか?
可能であれば、このIEnumerableの使用法について説明するリンクをいくつか紹介するか、スローしてください。