445 votes

Récupérer un élément de liste par index

J'ai récemment commencé à utiliser le langage C# en passant de Java à C#. Je n'arrive pas à trouver comment obtenir un élément de liste par index. En Java, pour obtenir le premier élément de la liste, ce serait :

list1.get(0);

Quel est l'équivalent en c# ?

4 votes

Voir stackoverflow.com/questions/5326874/ pour savoir s'il faut utiliser l'opérateur [] ou la méthode ElementAt().

1 votes

@user1909486 : Vous n'avez accepté aucune réponse à vos questions.

493voto

Mitch Wheat Points 169614
list1[0];

En supposant que le type de la liste a un indexeur défini.

6 votes

La seule réponse qui explique pourquoi il est possible d'accéder à une liste, qui est un objet, comme un tableau

1 votes

Renvoie-t-il une copie de l'objet dans la liste ? obj = list[0] ; list.clear() ; // obj sera-t-il toujours rempli ?

4 votes

@Paul McCarthy : vous pourriez facilement tester cela vous-même, mais Oui. Une liste contient des références à des objets. L'effacement de la liste n'affecte pas les objets qu'elle contient. S'il n'y a pas d'autres références à ces objets, ils seront ramassés à un moment donné.

300voto

user3004826 Points 271

Vous pouvez utiliser la méthode d'extension ElementAt sur la liste.

Par exemple :

// Get the first item from the list

using System.Linq;

var myList = new List<string>{ "Yes", "No", "Maybe"};
var firstItem = myList.ElementAt(0);

// Do something with firstItem

35 votes

Il est à noter que ElementAt() nécessite using System.Linq; .

33 votes

Y a-t-il un avantage à cela par rapport à la norme myList[0] la notation ?

14 votes

"Pourquoi utiliser Enumerable.ElementAt() plutôt que l'opérateur [] ?" stackoverflow.com/questions/5326874/

41voto

Zeyad Qunees Points 449

Visual Basic, C# et C++ ont tous une syntaxe permettant d'accéder à la propriété Item sans utiliser son nom. Au lieu de cela, la variable contenant la liste est utilisée comme s'il s'agissait d'un tableau.

List[index]

Voir par exemple : https://msdn.microsoft.com/en-us/library/0ebtbkkc(v=vs.110).aspx

24voto

picolino Points 150

.NET List est une structure de données Array dans un "shell mutable".

Vous pouvez donc utiliser des index pour accéder à ses éléments, par exemple :

var firstElement = myList[0];
var secondElement = myList[1];

En commençant par C# 8.0 vous pouvez utiliser Index y Range pour accéder aux éléments. Elles permettent d'accéder à la fin de la séquence ou d'accéder à une partie spécifique de la séquence :

var lastElement = myList[^1]; // Using Index
var fiveElements = myList[2..7]; // Using Range, note that 7 is exclusive

Vous pouvez combiner des index et des plages ensemble :

var elementsFromThirdToEnd = myList[2..^0]; // Index and Range together

Vous pouvez également utiliser LINQ ElementAt mais dans 99 % des cas, cela n'est pas nécessaire et ne constitue qu'une solution peu performante.

21voto

Xellarant Points 201

C'est une vieille question, mais je vois que ce fil de discussion a été actif assez récemment, alors je vais aller de l'avant et ajouter mon grain de sel :

A peu près exactement ce que Mitch a dit. En supposant une indexation correcte, vous pouvez simplement utiliser la notation entre crochets comme si vous accédiez à un tableau. En plus d'utiliser l'index numérique, si vos membres ont des noms spécifiques, vous pouvez souvent faire une sorte de recherche/accès simultané en tapant quelque chose comme :

var temp = list1["DesiredMember"];

Plus on en sait, non ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X