Obtener un elemento de lista por índice

321

Recientemente comencé a usar C # moviéndome desde Java. Parece que no puedo encontrar cómo obtener un elemento de lista por índice. En Java para obtener el primer elemento de la lista sería:

list1.get(0);

¿Cuál es el equivalente en c #?

user1909486
fuente
44
Consulte stackoverflow.com/questions/5326874/… para obtener más información sobre si utilizar el operador [] o el método ElementAt ().
ngm

Respuestas:

362
list1[0];

Asumiendo que el tipo de la lista tiene un indexador definido.

Trigo Mitch
fuente
55
La única respuesta que explica por qué es posible acceder a una lista, que es un objeto, como una matriz
PrashanD
¿Devuelve una copia del objeto en la lista? obj = lista [0]; list.clear (); // ¿obj todavía se completará?
Paul McCarthy
1
@ Paul McCarthy: fácilmente podrías probar esto tú mismo, pero sí. Una lista contiene referencias a objetos. Borrar la lista no afecta a los objetos que contiene. Si no hay otras referencias a esos objetos, se recolectarán basura en algún momento.
Mitch Wheat
242

Puede usar el método de extensión ElementAt en la lista.

Por ejemplo:

// 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
usuario3004826
fuente
24
Solo para notar que ElementAt () requiere using System.Linq;.
ngm
16
¿Hay alguna ventaja en esto sobre la myList[0]notación estándar ?
AnalogWeapon
55
"¿Por qué usaría Enumerable.ElementAt () versus el operador []?" stackoverflow.com/questions/5326874/…
Lavande
3
.ElementAtOrDefault();
amit jha
@AnalogWeapon, sí, puede usarlo como parte de una cadena segura nula, por ejemplo, myCollectionWhichMightBeNull?.ElementAt(0)o para proteger contra un elemento inexistente:myCollection.ElementAtOrDefault(0)?.SomeProperty
Chris Peacock
18

Antigua pregunta, pero veo que este hilo estuvo bastante activo recientemente, así que seguiré y arrojaré mis dos centavos:

Más o menos exactamente lo que dijo Mitch. Suponiendo una indexación adecuada, puede seguir adelante y usar la notación de corchetes como si estuviera accediendo a una matriz. Sin embargo, además de usar el índice numérico, si sus miembros tienen nombres específicos, a menudo puede realizar una búsqueda / acceso simultáneo escribiendo algo como:

var temp = list1["DesiredMember"];

Cuanto más sabes, ¿verdad?

Xellarant
fuente
0

La Listestructura de datos .NET está Arrayen un "shell mutable".

Entonces puede usar índices para acceder a sus elementos como:

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

Comenzando con C # 8.0 , puede usar Indexy Rangeclases para acceder a elementos. Proporcionan acceso desde el final de la secuencia o simplemente acceden a una parte específica de la secuencia:

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

Puede combinar índices y rangos juntos:

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

También puede usar el ElementAtmétodo LINQ , pero en el 99% de los casos esto realmente no es necesario y solo es una solución de rendimiento lento.

picolino
fuente
0

puedes usar index para acceder a los elementos de la lista

List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
Codemaker
fuente