List<T>
항목이 열거 될 때 추가 된 순서대로 반환된다는 것을 항상 보장 합니까 ?
업데이트 됨 : 모든 답변에 감사드립니다. List<T>
.NET Reflector를 사용하여클래스를빠르게 살펴 봤고(아마도 처음에이를 수행했을 것입니다) 실제로 기본 저장소는T
(T[]
)의 배열입니다.
List<T>
항목이 열거 될 때 추가 된 순서대로 반환된다는 것을 항상 보장 합니까 ?
업데이트 됨 : 모든 답변에 감사드립니다. List<T>
.NET Reflector를 사용하여클래스를빠르게 살펴 봤고(아마도 처음에이를 수행했을 것입니다) 실제로 기본 저장소는T
(T[]
)의 배열입니다.
답변:
목록은 색인 기반이며 새 항목은 항상 목록 끝에 추가됩니다. 다음 항목이 한 위치로 이동하도록 특정 색인에 항목을 삽입 할 수 있습니다.
그래서 네 , 그렇게 안전하게 사용할 수 있습니다 .
List (T) 클래스는 ArrayList 클래스에 해당하는 일반적인 클래스입니다. 필요에 따라 크기가 동적으로 증가하는 배열을 사용하여 IList (T) 제네릭 인터페이스를 구현합니다.
이 컬렉션의 요소는 정수 인덱스를 사용하여 액세스 할 수 있습니다. 이 컬렉션의 인덱스는 0부터 시작합니다.
List (T)는 정렬이 보장되지 않습니다. List (T)를 정렬해야하는 작업 (예 : BinarySearch)을 수행하기 전에 List (T)를 정렬해야합니다.
컬렉션이 수정되지 않는 한 List (T)는 동시에 여러 판독기를 지원할 수 있습니다. 컬렉션을 통한 열거는 본질적으로 스레드로부터 안전한 프로 시저가 아닙니다. 드물게 열거가 하나 이상의 쓰기 액세스와 충돌하는 경우 스레드 안전성을 보장하는 유일한 방법은 전체 열거 동안 컬렉션을 잠그는 것입니다. 읽기 및 쓰기를 위해 여러 스레드에서 컬렉션에 액세스 할 수 있도록하려면 고유 한 동기화를 구현해야합니다.
MSDN 에서 자세한 내용을 읽을 수 있습니다 .
예, 삽입 순서와 검색 순서를 모두List<T>
보장 하며 이는 MSDN에 문서화되어 있습니다 (아래 강조는 내 것임).
의 끝에
List<T>
개체를 추가합니다 .
항목 매개 변수는 다음과 같습니다.
의 끝에
List<T>
추가 할 개체 입니다.
받는 지정된 컬렉션의 요소에 추가 의 끝을
List<T>
.
컬렉션 매개 변수는 다음과 같습니다.
.NET Framework의 끝에
List<T>
요소를 추가해야하는 컬렉션입니다 .
처음에 열거자는 컬렉션의 첫 번째 요소 앞에 배치됩니다. 이 위치에서
Current
정의되지 않습니다. 따라서 의 값을 읽기 전에MoveNext
열거자를 컬렉션 의 첫 번째 요소로 이동 하도록 호출해야합니다Current
.
Current
MoveNext
호출 될 때까지 동일한 객체를 반환합니다 . 다음 요소로MoveNext
설정 Current
합니다 .
does AddRange()
전달 된 요소의 순서를 유지하거나 내부 배열에 추가하는 순서로 자유롭게 이동할 수 있습니까? (분명히 그들은 모두 현재 목록의 끝에있을 것입니다)
예. 그러나 이것은 사양의 일부가 아닙니다.
참조 : 목록 클래스