Obtention d'un élément de liste par index


321

J'ai récemment commencé à utiliser c # en passant de Java. 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
Voir stackoverflow.com/questions/5326874/… pour une discussion sur l'opportunité d'utiliser l'opérateur [] ou la méthode ElementAt ().
ngm

Réponses:


362
list1[0];

En supposant que le type de liste possède un indexeur défini.


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

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

1
@Paul McCarthy: vous pouvez facilement le tester vous-même, mais oui. Une liste contient des références à des objets. La suppression 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 récupérés à un moment donné.
Mitch Wheat

242

Vous pouvez utiliser la méthode d'extension ElementAt dans 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

24
Juste pour noter que ElementAt () nécessite using System.Linq;.
ngm

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

5
"Pourquoi devrais-je utiliser Enumerable.ElementAt () par rapport à l'opérateur []?" stackoverflow.com/questions/5326874/…
Lavande

3
.ElementAtOrDefault();
amit jha

@AnalogWeapon oui, il existe - vous pouvez l'utiliser dans le cadre d'une chaîne de sécurité nulle, par exemple myCollectionWhichMightBeNull?.ElementAt(0)ou pour protéger contre un élément inexistant:myCollection.ElementAtOrDefault(0)?.SomeProperty
Chris Peacock


18

Vieille question, mais je vois que ce fil était assez récemment actif, alors je vais continuer et jeter mes deux cents:

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

var temp = list1["DesiredMember"];

Plus vous en savez, non?


0

La Liststructure de données .NET est Arraydans un "shell mutable".

Vous pouvez donc utiliser des index pour accéder à ses éléments comme:

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

À partir de C # 8.0, vous pouvez utiliser des classes Indexet Rangepour accéder aux éléments. Ils permettent d'accéder à la fin de la séquence ou d'accéder simplement à 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 la ElementAtméthode LINQ mais pour 99% des cas, ce n'est vraiment pas nécessaire et juste une solution de performance lente.


0

vous pouvez utiliser l'index pour accéder aux éléments de la liste

List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.