Uzyskiwanie elementu listy według indeksu


321

Ostatnio zacząłem używać c # przechodząc z Javy. Nie mogę znaleźć sposobu na uzyskanie elementu listy według indeksu. W java, aby uzyskać pierwszą pozycję na liście, byłoby:

list1.get(0);

Jaki jest odpowiednik w c #?


4
Zobacz stackoverflow.com/questions/5326874/ ..., aby dowiedzieć się, czy użyć operatora [], czy metody ElementAt ().
ngm

Odpowiedzi:


362
list1[0];

Zakładając, że typ listy ma zdefiniowany indeksator.


5
Jedyna odpowiedź, która wyjaśnia, dlaczego można uzyskać dostęp do listy, która jest obiektem, takim jak tablica
PrashanD

Czy zwraca kopię obiektu na liście? obj = lista [0]; list.clear (); // czy obiekt nadal będzie wypełniony?
Paul McCarthy

1
@Paul McCarthy: możesz to łatwo przetestować sam, ale tak. Lista zawiera odniesienia do obiektów. Wyczyszczenie listy nie wpływa na obiekty w niej przechowywane. Jeśli nie ma innych odniesień do tych obiektów, zostaną one w pewnym momencie usunięte.
Mitch Wheat

241

Na liście można użyć metody rozszerzenia ElementAt.

Na przykład:

// 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
Należy tylko zauważyć, że ElementAt () wymaga using System.Linq;.
ngm

16
Czy ma to jakąś przewagę nad standardową myList[0]notacją?
AnalogWeapon

5
„Dlaczego miałbym używać Enumerable.ElementAt () kontra operator []?” stackoverflow.com/questions/5326874/…
Lavande

3
.ElementAtOrDefault();
amit jha,

@AnalogWeapon tak, istnieje - można go użyć jako część bezpiecznego łańcucha zerowego, np. myCollectionWhichMightBeNull?.ElementAt(0)Lub w celu zabezpieczenia nieistniejącego elementu:myCollection.ElementAtOrDefault(0)?.SomeProperty
Chris Peacock


18

Stare pytanie, ale widzę, że ten wątek był dość niedawno aktywny, więc pójdę dalej i wrzucę moje dwa centy:

Prawie dokładnie to, co powiedział Mitch. Zakładając prawidłowe indeksowanie, możesz po prostu użyć zapisu w nawiasach kwadratowych, tak jakbyś miał dostęp do tablicy. Oprócz korzystania z indeksu numerycznego, jeśli jednak członkowie mają określone nazwy, często można wykonać rodzaj jednoczesnego wyszukiwania / dostępu, wpisując coś w stylu:

var temp = list1["DesiredMember"];

Im więcej wiesz, prawda?


0

ListStruktura danych .NET Arrayto „zmienna powłoka”.

Możesz więc użyć indeksów do uzyskania dostępu do takich elementów, jak:

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

Począwszy od C # 8.0 możesz używać Indexi Rangeklas do uzyskiwania dostępu do elementów. Zapewniają dostęp od końca sekwencji lub po prostu dostęp do określonej części sekwencji:

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

Możesz łączyć indeksy i zakresy razem:

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

Możesz także użyć ElementAtmetody LINQ , ale w 99% przypadków tak naprawdę nie jest to konieczne, a jedynie rozwiązanie o niskiej wydajności.


0

możesz użyć indeksu, aby uzyskać dostęp do elementów listy

List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.