Ottenere un elemento dell'elenco per indice


321

Di recente ho iniziato a utilizzare c # passando da Java. Non riesco a trovare come ottenere un elemento dell'elenco per indice. In java per ottenere il primo elemento dell'elenco sarebbe:

list1.get(0);

Qual è l'equivalente in c #?


4
Vedere stackoverflow.com/questions/5326874/… per alcune discussioni sull'opportunità di utilizzare l'operatore [] o il metodo ElementAt ().
ngm,

Risposte:


362
list1[0];

Supponendo che il tipo di elenco abbia un indicizzatore definito.


5
L'unica risposta che spiega perché è possibile accedere a un elenco, che è un oggetto, come un array
PrashanD

Restituisce una copia dell'oggetto nell'elenco? obj = list [0]; list.clear (); // sarà ancora popolato obj?
Paul McCarthy,

1
@Paul McCarthy: potresti facilmente testarlo da solo, ma sì. Un elenco contiene riferimenti ad oggetti. L'eliminazione dell'elenco non influisce sugli oggetti contenuti in esso. Se non ci sono altri riferimenti a quegli oggetti, saranno spazzati in un certo momento.
Mitch Wheat

242

È possibile utilizzare il metodo di estensione ElementAt nell'elenco.

Per esempio:

// 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
Solo per notare che ElementAt () richiede using System.Linq;.
ngm,

16
C'è qualche vantaggio su questo rispetto alla myList[0]notazione standard ?
AnalogWeapon

5
"Perché dovrei usare Enumerable.ElementAt () contro l'operatore []?" stackoverflow.com/questions/5326874/…
Lavande

3
.ElementAtOrDefault();
Amit jha

@AnalogWeapon sì, c'è - puoi usarlo come parte di una catena di sicurezza nulla, ad esempio myCollectionWhichMightBeNull?.ElementAt(0)o per salvaguardare un elemento inesistente:myCollection.ElementAtOrDefault(0)?.SomeProperty
Chris Peacock,


18

Vecchia domanda, ma vedo che questa discussione è stata piuttosto recente, quindi andrò avanti e aggiungerò i miei due centesimi:

Praticamente esattamente quello che ha detto Mitch. Supponendo una corretta indicizzazione, puoi semplicemente andare avanti e utilizzare la notazione parentesi quadra come se stessi accedendo a un array. Oltre a utilizzare l'indice numerico, tuttavia, se i tuoi membri hanno nomi specifici, puoi spesso effettuare una ricerca / accesso simultanei digitando qualcosa del tipo:

var temp = list1["DesiredMember"];

Più sai, vero?


0

La Liststruttura di dati .NET è Arrayuna "shell mutabile".

Quindi puoi usare gli indici per accedere ai suoi elementi come:

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

A partire da C # 8.0 è possibile utilizzare Indexe le Rangeclassi per accedere agli elementi. Forniscono l'accesso dalla fine della sequenza o semplicemente accedono a una parte specifica della sequenza:

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

È possibile combinare indici e intervalli insieme:

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

Inoltre è possibile utilizzare il ElementAtmetodo LINQ , ma per il 99% dei casi questa non è davvero necessaria e solo una soluzione con prestazioni lente.


0

è possibile utilizzare l'indice per accedere agli elementi dell'elenco

List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.