Abrufen eines Listenelements nach Index


320

Ich habe vor kurzem angefangen, c # zu verwenden, um von Java zu wechseln. Ich kann anscheinend nicht finden, wie ich ein Listenelement nach Index erhalte. In Java wäre es, um das erste Element der Liste zu erhalten:

list1.get(0);

Was ist das Äquivalent in c #?


4
Unter stackoverflow.com/questions/5326874/… finden Sie einige Erläuterungen zur Verwendung des Operators [] oder der Methode ElementAt ().
ngm

Antworten:


361
list1[0];

Angenommen, für den Listentyp ist ein Indexer definiert.


5
Die einzige Antwort, die erklärt, warum es möglich ist, auf eine Liste zuzugreifen, die ein Objekt wie ein Array ist
PrashanD

Gibt es eine Kopie des Objekts in der Liste zurück? obj = Liste [0]; list.clear (); // Wird obj noch gefüllt sein?
Paul McCarthy

1
@ Paul McCarthy: Sie könnten dies leicht selbst testen, aber ja. Eine Liste enthält Verweise auf Objekte. Das Löschen der Liste wirkt sich nicht auf die darin enthaltenen Objekte aus. Wenn es keine anderen Verweise auf diese Objekte gibt, werden sie zu einem bestimmten Zeitpunkt als Müll gesammelt.
Mitch Wheat

240

Sie können die ElementAt-Erweiterungsmethode in der Liste verwenden.

Zum Beispiel:

// 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
Nur um zu beachten, dass ElementAt () erfordert using System.Linq;.
ngm

16
Gibt es einen Vorteil gegenüber der Standardnotation myList[0]?
AnalogWeapon

5
"Warum sollte ich Enumerable.ElementAt () gegenüber dem Operator [] verwenden?" stackoverflow.com/questions/5326874/...
Lavande

3
.ElementAtOrDefault();
Amit Jha

@AnalogWeapon Ja, das gibt es - Sie können es als Teil einer Null-Safe-Kette verwenden, z. B. myCollectionWhichMightBeNull?.ElementAt(0)oder um sich vor einem nicht vorhandenen Element zu schützen:myCollection.ElementAtOrDefault(0)?.SomeProperty
Chris Peacock


18

Alte Frage, aber ich sehe, dass dieser Thread erst vor kurzem aktiv war, also werde ich meine zwei Cent einwerfen:

Ziemlich genau das, was Mitch gesagt hat. Unter der Annahme einer ordnungsgemäßen Indizierung können Sie einfach die eckige Klammer verwenden, als würden Sie auf ein Array zugreifen. Zusätzlich zur Verwendung des numerischen Index können Sie jedoch, wenn Ihre Mitglieder bestimmte Namen haben, häufig eine Art gleichzeitigen Such- / Zugriff durchführen, indem Sie Folgendes eingeben:

var temp = list1["DesiredMember"];

Je mehr du weißt, richtig?


0

Die .NET- ListDatenstruktur befindet sich Arrayin einer "veränderlichen Shell".

Sie können also Indizes für den Zugriff auf die folgenden Elemente verwenden:

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

Ab C # 8.0 können Sie Indexund RangeKlassen für den Zugriff auf Elemente verwenden. Sie bieten Zugriff vom Ende der Sequenz oder nur Zugriff auf einen bestimmten Teil der Sequenz:

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

Sie können Indizes und Bereiche miteinander kombinieren:

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

Sie können auch die LINQ- ElementAtMethode verwenden, aber in 99% der Fälle ist dies wirklich nicht erforderlich und nur eine Lösung mit langsamer Leistung.


0

Sie können den Index verwenden, um auf Listenelemente zuzugreifen

List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.