열거 자 작동 방식과 LINQ에 대한 의구심이 있습니다. 다음 두 가지 간단한 선택을 고려하십시오.
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*/ }
IE를 사용할 수있는
IEnumerable
"sel"을 디버깅하고 검사 할 때 "inner", "outer", "innerKeySelector"및 "outerKeySelector"와 같은 흥미로운 멤버가있는 경우이 마지막 2 개가 나타납니다. 대의원이 될 수 있습니다. "inner"멤버에는 "Animal"인스턴스가 아니라 "Species"인스턴스가 있는데 이는 매우 이상했습니다. "outer"멤버는 "Animal"인스턴스를 포함합니다. 나는 두 대표가 어느 쪽이 들어오고 나가는지를 결정한다고 가정합니다."Distinct"를 사용하면 "inner"에 6 개의 항목이 포함되지만 (2 개만 구분되므로 올바르지 않습니다) "outer"에 올바른 값이 포함되어 있습니다. 다시 말하지만, 위임 된 메소드가 이것을 결정하지만 IEnumerable에 대해 아는 것보다 조금 더 큽니다.
가장 중요한 것은 두 가지 옵션 중 성능면에서 가장 좋은 방법은 무엇입니까?
.ToList()
? 를 통한 악 목록 변환
아니면 열거자를 직접 사용합니까?
가능하다면 IEnumerable의 사용법을 설명하는 약간의 링크를 던져주십시오.