문제

가능한 중복:
할 수 있는 누군가를 설명페이고 IEnumerator 요?

의 차이점이 무엇이 IEnumerator 및페?

도움이 되었습니까?

해결책

ienumerable 하나의 메소드를 정의하는 인터페이스입니다 getEnumerator 반환합니다 ienumerator 인터페이스, 이것은 차례로 컬렉션에 읽기 위해 액세스 할 수 있습니다. ienumerable을 구현하는 컬렉션은 Foreach 문과 함께 사용할 수 있습니다.

정의

IEnumerable 

public IEnumerator GetEnumerator();

IEnumerator

public object Current;
public void Reset();
public bool MoveNext();

codebetter.com의 코드 예제

다른 팁

IEnumerator 는 것은 열거할 수 있습니다:그것은 CurrentMoveNextReset 방법(는습니다.순 코드에 당신은 아마 부르지 않을 것이 명시적으로,당신이 할 수 있지만).

IEnumerable 는 것은 열거할 수 있습니다...단순히는 것을 의미가 있 GetEnumerator 메서드를 반환하는 IEnumerator.

어떤 사용 합니까?만 사용하는 이유 IEnumerator 은 당신이 뭔가가있는 경우가 있는 비표준 방법의 열거(는 반환하는 다양한 요소를 하나씩),그리고 당신이 정의할 필요가 어떻게 작동되는지 확인합니다.당신이 새로 만들어를 구현하는 클래스 IEnumerator.하지만 당신은 여전히 필요를 반환하는 IEnumeratorIEnumerable 클래스입니다.

을 위해 무엇을 살펴 열거자(을 구현하는 IEnumerator<T>')는 다음과 같습니,보 Enumerator<T> 클래스와 같은 것들에 포함된 List<T>, Queue<T>,Stack<T>.에 대한 보고서를 구현하는 클래스 IEnumerable, 참조 표준 컬렉션 클래스입니다.

an Enumerator 목록이나 컬렉션의 항목을 보여줍니다. 열거 자의 각 인스턴스는 특정 위치 (첫 번째 요소, 7 번째 요소 등)에 있으며 해당 요소를 줄 수 있습니다 (IEnumerator.Current) 또는 다음 중 하나로 이동 (IEnumerator.MoveNext). 당신이 쓸 때 foreach C#의 루프는 컴파일러가 열거자를 사용하는 코드를 생성합니다.

an Enumerable 당신에게 줄 수있는 수업입니다 Enumerator에스. 그것은 불리는 메소드가 있습니다 GetEnumerator 당신에게 당신에게 Enumerator 그것은 그 아이템을 본다. 당신이 쓸 때 foreach C#의 루프, 통화를 생성하는 코드 GetEnumerator 만들기 위해 Enumerator 루프에 의해 사용됩니다.

ienumerable 및 ienumerator는 둘 다 인터페이스입니다. ienumerable에는 getEnumerator라는 방법이 하나뿐입니다. 이 메소드는 (모든 메소드가 무효를 포함하여 무언가를 반환함에 따라) 인터페이스이고 해당 인터페이스가 ienumerator입니다. 컬렉션 클래스에서 열거 자 논리를 구현하면 ienumerable (일반 또는 비 제네릭)을 구현합니다. ienumerable에는 하나의 방법이 하나 뿐인 반면 ienumerator에는 2 개의 메소드 (Movenext 및 Reset)와 속성 전류가 있습니다. 쉽게 이해하려면 ienumebale 내부에 ienumerator를 포함하는 상자를 고려하십시오 (상속이나 격리를 통한 것은 아니지만). 더 나은 이해를 위해 코드를 참조하십시오.

    class Test : IEnumerable, IEnumerator
    {
         IEnumerator IEnumerable.GetEnumerator()
        {
            throw new NotImplementedException();
        }

        public object Current
        {
            get { throw new NotImplementedException(); }
        }

        public bool MoveNext()
        {
            throw new NotImplementedException();
        }
        public void Reset()
        {
            throw new NotImplementedException();
        }
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top