Question

Puis-je supposer que le IEnumerator je reçois d'un IList (en appelant la méthode de GetEnumerator de l'interface IEnumerable) me donnera les éléments dans l'ordre de la liste?

Était-ce utile?

La solution

Vous ne pouvez pas, parce que IList est une interface et une implémentation peut énumérer les éléments dans un ordre quelconque. Par exemple, je pourrais implemenent WeirdList: IList, et avoir énumèrent les éléments de quelque manière, y compris les non-déterministe. Si vous utilisez une liste (T) d'autre part, il garantit d'énumérer les éléments dans l'ordre où ils sont stockés dans la liste.

Modifier : Cela étant dit, comme beaucoup d'autres font remarquer, la plupart des implémentations vont suivre la sémantique de la liste (T). Bien que ce n'était pas ce que vous avez demandé;)

Autres conseils

Le recenseur devrait vous donner accès aux objets à l'intérieur de la liste par rapport à leur position dans la mémoire qui serait le même que l'utilisation de l'indexeur de la liste allant de 0 à longueur <1 dans une boucle.

Modifier Je lui ai répondu spécifiquement en ce qui concerne les classes du framework .NET qui mettent en œuvre IList, si une autre personne mettre en œuvre ces interfaces leur mise en œuvre effective pourrait être à peu près tout. Donc, cela dépend implémenteur.

Oui, il fera exactement que, pour une mise en œuvre correcte de IList au moins. Un bon IList doit toujours énumérer ses éléments dans le même ordre que celui dans lequel la liste est indexée.

List<int> list = new List<int> { 1, 1, 2, 3, 5, 8 };

IEnumerator<int> enumtor = list.GetEnumerator();
while (enumtor.MoveNext())
{
    Console.Write(enumtor.Current);
}

Imprime 112358.

Cela dépendra de la mise en œuvre du IList

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top