development

IEnumerable과 Array, IList 및 List의 차이점은 무엇입니까?

big-blog 2020. 9. 14. 21:27
반응형

IEnumerable과 Array, IList 및 List의 차이점은 무엇입니까?


IEnumerable의 차이점은 무엇입니까 Array?

IList의 차이점은 무엇입니까 List?

이것들은 같은 기능을하는 것 같습니다.


IEnumerable은 최소한의 "반복 가능"기능 만 제공합니다. 시퀀스를 순회 할 수 있지만 그게 전부입니다. 예를 들어 IEnumerable을 사용하여 요소를 계산하거나 n 번째 요소를 얻는 것은 매우 비효율적이지만 장점도 있습니다. 예를 들어 IEnumerable은 소수의 시퀀스처럼 무한 시퀀스가 ​​될 수 있습니다.

배열은 임의 액세스가 가능한 고정 크기 모음입니다 (즉, 색인화 할 수 있음).

목록은 임의 액세스가 가능한 가변 크기 모음입니다 (즉, 요소를 추가 및 제거 할 수 있음).

IList는 List, BindingList, ObservableCollection 등과 같은 다양한 구체적인 클래스에서 떨어져 목록 기능 (개수, 추가, 제거, 인덱서 액세스)을 추상화하는 인터페이스입니다.


IEnumerable은 항목 컬렉션 (예 : foreach 키워드를 통해)을 통한 반복을 허용하는 인터페이스입니다.

배열은 .NET 내장입니다. 동일한 유형의 항목을 보관하지만 크기는 고정되어 있습니다. x 요소로 배열을 생성하면 확장하거나 축소 할 수 없습니다.

IList는 목록에 대한 인터페이스를 정의하고 IEnumerable도 구현합니다.

List는 IList 인터페이스를 구현합니다. 구체적인 유형의 목록입니다.

.NET 목록과 배열의 차이점은 목록에 요소가 추가 될 수 있다는 것입니다. 목록은 필요한 모든 항목을 포함 할 수있을만큼 커질 수 있습니다. 목록은이를 내부적으로 배열에 저장하고 배열이 더 이상 모든 요소를 ​​보유 할만큼 크지 않으면 새 배열이 생성되고 항목이 복사됩니다.

IList 및 배열은 모두 IEnumerable을 구현합니다. 이것이 인터페이스가 작동하는 방식입니다. 클래스는 계약을 구현하고 비슷한 방식으로 동작하며 결과적으로 유사하게 처리 될 수 있습니다 (클래스가 IEnumerable을 구현한다는 것을 알고 있으므로 방법이나 이유를 알 필요가 없습니다). 인터페이스 등에 대해 읽어 보는 것이 좋습니다.


IEnumerable 및 IList는 인터페이스 입니다. 배열과 목록은 클래스입니다. 배열은 IEnumerable을 구현합니다. List는 IEnumerable을 확장하는 IList를 구현합니다.

편집 : itowlson이 주석에서 언급했듯이 Array는 IList도 구현합니다.


IEnumerable 컬렉션 생성이 지연됩니다. 예:

public IEnumerable<int> GetTwoInts()
{
  yield return 1;
  yield return 2;
}
public void Something()
{
  var twoInts = GetTwoInts();
}

Something 메서드에서 GetTwoInts ()에 대한 호출은 열거가 반복되지 않기 때문에 실제로 GetTwoInts 메서드가 실행되지 않습니다.


IEnumerable같은 많은 클래스에 의해 사용되는 범용 인터페이스 Array, ListString수집을 통해 누군가의 반복 처리를하도록하기 위해서이다. 기본적으로 foreach성명서 의 원동력 입니다.

IList일반적으로 유형의 변수 List를 최종 사용자에게 노출하는 방법 입니다. 이 인터페이스는 기본 컬렉션에 대한 임의 액세스를 허용합니다.


다른 답변을 보완하려면 foreach 문을 실행할 때 실행할 때 성능 차이있습니다.IList<T>List<T>

에서 반환 된 반복기 개체 List<T>.GetEnumerator는 값 형식이고에서 반환 된 개체 IList<T>.GetEnumerator는 참조 형식이므로 메모리 할당이 필요하기 때문입니다 ( c #의 값 형식 목록 열거 자 참조 ).

제 생각에는 IList<T>어쨌든 좋은 인터페이스가 아닙니다. 예를 들어 호출이 Add발생할 수 있습니다 ( 배열이 IList를 구현하는 이유 참조 ). 캡슐화가 필요한 경우 IEnumerable<T>또는 을 사용하는 것이 좋습니다 IReadOnlyList<T>.


This is an old post, but still thought of replying. IEnumerable is a behavior while Array is a data structure(Contiguous collection of elements with fixed size, facilitating accessing elements by indexes) . When an Array implements IEnumerable, it is supposed to depict IEnumerable inherent property also (of facilitating iteration over the collection).

참고URL : https://stackoverflow.com/questions/764748/whats-the-difference-between-ienumerable-and-array-ilist-and-list

반응형