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 #?

user1909486
la source
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.

Blé Mitch
la source
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
user3004826
la source
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?

Xellarant
la source
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.

picolino
la source
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
Codemaker
la source