수색…


소개

IEnumerable 은 열거 할 수있는 ArrayList와 같은 모든 비 제네릭 컬렉션의 기본 인터페이스입니다. IEnumerator<T> 는 List <>와 같은 모든 일반 열거 자의 기본 인터페이스입니다.

IEnumerableGetEnumerator 메서드를 구현하는 인터페이스입니다. GetEnumerator 메서드는 foreach와 같은 컬렉션을 반복하는 옵션을 제공하는 IEnumerator 를 반환합니다.

비고

IEnumerable은 열거 할 수있는 모든 비 제네릭 컬렉션에 대한 기본 인터페이스입니다.

IEnumerable

가장 기본적인 형식에서 IEnumerable을 구현하는 객체는 일련의 객체를 나타냅니다. 해당 개체는 c # foreach 키워드를 사용하여 반복 할 수 있습니다.

아래 예제에서 sequenceOfNumbers 객체는 IEnumerable을 구현합니다. 일련의 정수를 나타냅니다. foreach 루프는 각각을 차례로 반복합니다.

int AddNumbers(IEnumerable<int> sequenceOfNumbers) {
    int returnValue = 0;
    foreach(int i in sequenceOfNumbers) {
        returnValue += i;
    }
    return returnValue;
}

사용자 지정 열거자를 사용하는 IEnumerable

IEnumerable 인터페이스를 구현하면 클래스를 BCL 컬렉션과 동일한 방식으로 열거 할 수 있습니다. 이렇게하려면 열거 형 상태를 추적하는 열거 자 클래스를 확장해야합니다.

표준 컬렉션을 반복하는 것 외에도 다음과 같은 예가 있습니다.

  • 개체 모음이 아닌 함수를 기반으로 숫자 범위 사용
  • 그래프 컬렉션의 DFS 또는 BFS와 같은 컬렉션에 대해 다른 반복 알고리즘 구현
public static void Main(string[] args) {

    foreach (var coffee in new CoffeeCollection()) {
        Console.WriteLine(coffee);
    }
}

public class CoffeeCollection : IEnumerable {
    private CoffeeEnumerator enumerator;

    public CoffeeCollection() {
        enumerator = new CoffeeEnumerator();
    }

    public IEnumerator GetEnumerator() {
        return enumerator;
    }

    public class CoffeeEnumerator : IEnumerator {
        string[] beverages = new string[3] { "espresso", "macchiato", "latte" };
        int currentIndex = -1;

        public object Current {
            get {
                return beverages[currentIndex];
            }
        }

        public bool MoveNext() {
            currentIndex++;

            if (currentIndex < beverages.Length) {
                return true;
            }

            return false;
        }

        public void Reset() {
            currentIndex = 0;
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow