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:
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 =newList<string>{"Yes","No","Maybe"};var firstItem = myList.ElementAt(0);// Do something with firstItem
@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
27
Visual Basic, C # y C ++ tienen sintaxis para acceder a la propiedad Item sin usar su nombre. En cambio, la variable que contiene la Lista se usa como si fuera una matriz.
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:
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 Indexvar 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.
Respuestas:
Asumiendo que el tipo de la lista tiene un indexador definido.
fuente
Puede usar el método de extensión ElementAt en la lista.
Por ejemplo:
fuente
using System.Linq;
.myList[0]
notación estándar ?.ElementAtOrDefault();
myCollectionWhichMightBeNull?.ElementAt(0)
o para proteger contra un elemento inexistente:myCollection.ElementAtOrDefault(0)?.SomeProperty
Visual Basic, C # y C ++ tienen sintaxis para acceder a la propiedad Item sin usar su nombre. En cambio, la variable que contiene la Lista se usa como si fuera una matriz.
Ver por ejemplo: https://msdn.microsoft.com/en-us/library/0ebtbkkc(v=vs.110).aspx
fuente
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:
Cuanto más sabes, ¿verdad?
fuente
La
List
estructura de datos .NET estáArray
en un "shell mutable".Entonces puede usar índices para acceder a sus elementos como:
Comenzando con C # 8.0 , puede usar
Index
yRange
clases para acceder a elementos. Proporcionan acceso desde el final de la secuencia o simplemente acceden a una parte específica de la secuencia:Puede combinar índices y rangos juntos:
También puede usar el
ElementAt
método LINQ , pero en el 99% de los casos esto realmente no es necesario y solo es una solución de rendimiento lento.fuente
puedes usar index para acceder a los elementos de la lista
fuente