programing

.net에서 IEnumerable은 무엇입니까

nasanasas 2020. 11. 11. 20:14
반응형

.net에서 IEnumerable은 무엇입니까


.net에서 IEnumerable은 무엇입니까?


반복 할 수있는 것입니다. 목록이나 배열 또는 foreach루프 를 지원하는 (거의) 다른 모든 것이 될 수 있습니다 . foreach루프가 있는 객체를 사용할 수 있기를 원 하지만 배열, 목록 또는 사용자 정의 어떤 유형을 다루고 있는지 정확히 알지 못하는 경우입니다.

이것이 첫 번째 이점입니다. 메서드가 배열이나 목록이 아닌 IEnumerable을 받아들이면 더 다양한 종류의 개체를 전달할 수 있기 때문에 더욱 강력 해집니다.

이제 IEnumerable을 눈에 띄게 만드는 것은 반복자 블록 ( yieldC # 키워드)입니다. 반복자 블록은 List 또는 Array와 같은 IEnumerable 인터페이스를 구현하지만 List 또는 Array와 달리 한 번에 하나의 항목에 대한 상태 만 보유하는 경우가 많기 때문에 매우 특별합니다. 따라서 예를 들어 매우 큰 파일의 행을 반복하려는 경우 파일 입력을 처리하는 반복기 블록을 작성할 수 있습니다. 그러면 한 번에 한 줄 이상의 파일이 메모리에 저장되지 않으며 루프를 더 일찍 끝낸 경우 (아마도 검색이었고 필요한 것을 찾았다면) 전체 파일을 읽을 필요가 없을 수도 있습니다. 또는 대규모 SQL 쿼리의 결과를 읽는 경우 메모리 사용을 단일 레코드로 제한 할 수 있습니다.

또 다른 기능은이 평가가 lazy 이므로 읽을 때 열거 형을 평가하기 위해 복잡한 작업을 수행하는 경우 요청 될 때까지 해당 작업이 발생하지 않습니다. 이것은 추가로 유익합니다. 왜냐하면 종종 (다시 검색을 위해) 작업을 전혀 수행 할 필요가 없다는 것을 알게되기 때문입니다.

IEnumerable을 Just-In-Time 목록처럼 생각할 수 있습니다.


Iterator 패턴 을 제공하는 .NET의 Collection 형식에 의해 구현 된 인터페이스 입니다 . 인 일반 버전도 있습니다 IEnumerable<T>.

IEnumerable을 구현하는 컬렉션을 이동하기위한 구문 (더 예뻐지는 방법이 있기 때문에 거의 볼 수 없음)은 다음과 같습니다.

IEnumerator enumerator = collection.GetEnumerator();

while(enumerator.MoveNext())
{
    object obj = enumerator.Current;
    // work with the object
}

다음과 같은 기능이 있습니다.

foreach(object obj in collection)
{
    // work with the object
}

컬렉션이 인덱서를 지원하는 경우 클래식 for 루프 메서드를 사용하여 반복 할 수도 있지만 Iterator 패턴은 스레딩을위한 동기화를 추가하는 기능과 같은 멋진 추가 기능을 제공합니다.


먼저 인터페이스입니다. MSDN 에 따른 정의

제네릭이 아닌 컬렉션에 대한 단순 반복을 지원하는 열거자를 노출합니다.

매우 간단한 방법으로이 인터페이스를 구현하는 모든 객체는 열거자를 얻는 방법을 제공합니다. 열거자는 foreach하나의 예로 사용됩니다.

List는 IEnumerable 인터페이스를 구현합니다.

    // This is a collection that eventually we will use an Enumertor to loop through
    // rather than a typical index number if we used a for loop.
    List<string> dinosaurs = new List<string>();

    dinosaurs.Add("Tyrannosaurus");
    dinosaurs.Add("Amargasaurus");
    dinosaurs.Add("Mamenchisaurus");
    dinosaurs.Add("Deinonychus");
    dinosaurs.Add("Compsognathus");

    Console.WriteLine();

    // HERE is where the Enumerator is gotten from the List<string> object
    foreach(string dinosaur in dinosaurs)
    {
        Console.WriteLine(dinosaur);
    }

    // You could do a 
    for(int i = 0; i < dinosaurs.Count; i++)
    {
        string dinosaur = dinosaurs[i];

        Console.WriteLine(dinosaur);
    }

foreach가 더 깨끗해 보입니다.


짧은 대답은 사용할 수있는 모든 것 foreach입니다.

참고 URL : https://stackoverflow.com/questions/3014737/what-is-ienumerable-in-net

반응형