문제

반복 할 수없는 ienumerable 클래스가 있습니까?

반복 할 수 없음으로써 GetEnumerator를 여러 번 안전하게 호출 할 수 없거나 GetEnumerator를 호출 할 수있는 부작용이있는 곳을 의미합니다.

도움이 되었습니까?

해결책

File.ReadLines() 반환합니다 IEnumerable<T> 한 번만 작동합니다.

다른 팁

어떤 이유로 든 어떤 이유로 든 Ienumerable (t)의 구현이 적합한 품목을 반환 할 수 있습니다. 동일한 항목 시퀀스에서 GetEnumerator를 두 번 호출 한 다음 두 열거자를 통해 순환하면 동일한 순서로 동일한 항목을 생성하거나 예외를 던져야 할 것으로 예상됩니다. ienumerable (t)을 받아들이고 그러한 계약을 준수하지 않는 경우 나쁘게 실패 할 수있는 많은 루틴이 있습니다.

내가 druthers를 가지고 있다면, ienumerable은 인터페이스 가족으로 나뉘어 졌을 것입니다. 기본 ienumerable의 열거자는 재설정 방법을 잃고 반복성에 대한 특별한 약속을 전달하지 않습니다. 새로운 Imultienumerable은 재설정 방법으로 열거자를 반환하고 다중 패스가 동일한 데이터를 생성 할 것이라는 보장; 열거자는 자체 getEnumerator 방법을 지원할 수도 있습니다 (다중 통과 열거를 지원할 수있는 모든 유형에 실용적이어야합니다. 유일한 비용은 '시작'포인터 일 것입니다. 창조).

아니요, 구현하는 잘 행동하는 클래스 IEnumerable 반복되는 열거를 허용합니다.

반복 할 수없는 컬렉션을 열거하려면 구현하는 수업이 없습니다. IEnumerable. 대신 열거자를 반환하는 메소드가 있습니다. 그렇게하면 클래스 대신 열거자가 컬렉션을 보유하므로 전화 할 수 없습니다. GetEnumerator 같은 컬렉션에 대해 두 번. 열거자를 반복하려면 새 컬렉션을 만들려면 메소드를 호출해야합니다.

이것의 예는 Enumerable.Range 방법. 즉석에서 범위에 대한 항목을 생성하므로 범위는 컬렉션으로 존재하지 않으므로 반복 할 수 없습니다. 동일한 범위를 다시 열거하려면 메소드를 호출하여 동일한 범위를 가진 새 범위를 생성합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top