내가 (IEnumerable
인터페이스에서 GetEnumerator
메서드를 호출하여)에서 얻은 IEnumerator
이 목록의 순서대로 항목을 제공한다고 가정 할 수 있는지 알고 싶습니다..Net IList의 열거 형을 어떻게 처리해야합니까?
당신은 어떻게 생각하십니까?
내가 (IEnumerable
인터페이스에서 GetEnumerator
메서드를 호출하여)에서 얻은 IEnumerator
이 목록의 순서대로 항목을 제공한다고 가정 할 수 있는지 알고 싶습니다..Net IList의 열거 형을 어떻게 처리해야합니까?
당신은 어떻게 생각하십니까?
IList는 인터페이스이고 구현은 항목을 임의의 순서로 열거 할 수 있으므로 사용자가 할 수 없습니다. 예를 들어, WeirdList : IList를 구현할 수 있으며, 비 결정적으로 항목을 열거 할 수 있습니다. 반면에 목록 (T)을 사용하면 목록에 저장된 순서대로 항목을 열거 할 수 있습니다.
편집 : 많은 사람들이 지적한대로 대부분의 구현은 List (T)의 의미를 따릅니다. 당신이 물어 본 것은 아니지만)
그래, 적어도 IList
의 알맞은 구현을 위해 정확히 수행 할 것입니다. 좋은 IList
은 항상 목록이 색인 된 순서대로 요소를 열거해야합니다.
List<int> list = new List<int> { 1, 1, 2, 3, 5, 8 };
IEnumerator<int> enumtor = list.GetEnumerator();
while (enumtor.MoveNext())
{
Console.Write(enumtor.Current);
}
인쇄 112358
.
의 구현에 따라 달라집니다, 그것은 순서대로 반환하지 나을 몇 가지 예들이있다. –
보장은 없지만, 일반적으로 유효한 가정이며, 유효한 가정으로 간주됩니다. – Joren
나는 그것이 유효한 가정이어야한다는 데 동의하지만 프로그래머가 때로는 코드에서 미친 짓을하는 것을 경험하게 만들었습니다. –
열거자는 목록의 인덱서를 사용하여 0에서 길이 <까지와 같은 메모리 내의 위치를 기준으로 목록 안의 개체에 대한 액세스를 제공해야합니다 for 루프에서 1.
편집 : 나는 다른 사람이 자신의 실제 구현 그냥 아무것도 할 수 이러한 인터페이스를 구현해야합니다은 IList를 구현하는 .NET 프레임 워크 클래스에 관해서 구체적으로 대답했다. 따라서 구현 자에 따라 다릅니다.
이 IList의 구현 사람이이 원리를 따라 보장하는 방법은 지금이 IList의
+1 대부분의 구현은 비슷하지만 사실을 기반으로 코드를 작성하는 것은 큰 실수입니다. –
꽤 어렵고 빠른 의미를 갖는 데이터 구조의 의미를 검증하려고 시도하는 코드에 대해서는주의해야합니다. MyListImpl이 IList가 암시하는 것과 일치하는지 확인하기 위해 Unit 테스트에서는 괜찮지 만, 실제 프로덕션 코드에는 이러한 검사가 없어야합니다. – user7116