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 #?

user1909486
quelle
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.

Mitch Wheat
quelle
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
user3004826
quelle
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?

Xellarant
quelle
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.

Picolino
quelle
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
Codemaker
quelle