간단한 팁으로 IEnumerable.Any()를 사용하는 경우가 많습니다. 그 이유는 전체 열거 형을 반드시 통과시켜야하기 때문입니다.컴파일러는 IEnumerable <T> .Count()에 대한 비교를 최적화합니까?
방금 Enumerable에 단일 항목 또는 다중 항목이 있는지 확인하려고하는 코드 세그먼트를 작성했습니다. 내가 궁금해 만든
if (reportInfo.OrebodyAndPits.SelectMany(ob => ob.Pits).Count() > 1)
{
ws.Cells[row, col++].Value = "Pits";
}
else
{
ws.Cells[row, col++].Value = "Pit";
}
는 비교가 첫 번째 항목을지나 열거 즉시 false를 돌려 똑똑 형태로 컴파일 할 것인가?
그렇지 않다면, 할 수있는 linq 확장 메소드를 작성하는 방법이 있습니까?
(나는이 코드 조각의 성능에 미치는 영향에 정말 관심 없어, 유의하시기 바랍니다. 나는 주로 궁금 하군요.)
아니요, .Count()는 항목 수를 반환합니다. '123456789' 그리고 단지'> 1' 조건을 확인하십시오. 똑똑한 행동을 위해'Skip (1) .Any()'를 넣으십시오. 어떤 경우에는 (* 하나 제외 된) * .Net은'IEnumerable'이 실제로 배열 *'T []'또는 * list *'List '이라는 것을보고 트래킹 대신에'Length' 또는'Count'를 호출합니다 그러나 우리가 기대할 수있는 것은 이것입니다. –