.net에서 IEnumerable은 무엇입니까
.net에서 IEnumerable은 무엇입니까?
반복 할 수있는 것입니다. 목록이나 배열 또는 foreach
루프 를 지원하는 (거의) 다른 모든 것이 될 수 있습니다 . foreach
루프가 있는 객체를 사용할 수 있기를 원 하지만 배열, 목록 또는 사용자 정의 어떤 유형을 다루고 있는지 정확히 알지 못하는 경우입니다.
이것이 첫 번째 이점입니다. 메서드가 배열이나 목록이 아닌 IEnumerable을 받아들이면 더 다양한 종류의 개체를 전달할 수 있기 때문에 더욱 강력 해집니다.
이제 IEnumerable을 눈에 띄게 만드는 것은 반복자 블록 ( yield
C # 의 키워드)입니다. 반복자 블록은 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
'programing' 카테고리의 다른 글
std :: atomic에 대한 잠금은 어디에 있습니까? (0) | 2020.11.11 |
---|---|
fflush (stdin) 사용 (0) | 2020.11.11 |
자바 : 제한된 와일드 카드 또는 제한된 유형 매개 변수? (0) | 2020.11.11 |
테이블 행 채우기 (0) | 2020.11.11 |
$ (window) .load와 $ (document) .ready의 차이점은 무엇입니까? (0) | 2020.11.11 |