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
, List
및 String
수집을 통해 누군가의 반복 처리를하도록하기 위해서이다. 기본적으로 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).
'development' 카테고리의 다른 글
Lisp 개발에 Vim 사용 (0) | 2020.09.14 |
---|---|
Emacs 셸 모드에서 Bash 자동 완성 (0) | 2020.09.14 |
RB 트리, B- 트리 또는 AVL 트리를 언제 선택해야합니까? (0) | 2020.09.14 |
다음을 포함하는 둘러싸는 인스턴스 (0) | 2020.09.14 |
Java에서는 int 대신 byte 또는 short를 사용하고 double 대신 float를 사용하는 것이 더 효율적입니까? (0) | 2020.09.14 |