Mendapatkan item daftar berdasarkan indeks

321

Saya baru-baru ini mulai menggunakan c # pindah dari Jawa. Sepertinya saya tidak dapat menemukan cara mendapatkan item daftar berdasarkan indeks. Di java untuk mendapatkan item pertama dari daftar itu adalah:

list1.get(0);

Apa yang setara dalam c #?

pengguna1909486
sumber
4
Lihat stackoverflow.com/questions/5326874/... untuk beberapa diskusi mengenai apakah akan menggunakan operator [] atau metode ElementAt ().
ngm

Jawaban:

362
list1[0];

Mengasumsikan tipe daftar memiliki pengindeks ditentukan.

Mitch Wheat
sumber
5
Satu-satunya jawaban yang menjelaskan mengapa mungkin untuk mengakses daftar, yang merupakan objek, seperti array
PrashanD
Apakah itu mengembalikan salinan objek dalam daftar? obj = daftar [0]; list.clear (); // akankah obj masih diisi?
Paul McCarthy
1
@ Paul McCarthy: Anda bisa dengan mudah mengujinya sendiri, tapi Ya. Daftar menyimpan referensi ke objek. Mengosongkan daftar tidak mempengaruhi objek yang ada di dalamnya. Jika tidak ada referensi lain untuk benda-benda itu, mereka akan menjadi sampah yang dikumpulkan pada suatu titik waktu.
Mitch Wheat
242

Anda bisa menggunakan metode ekstensi ElementAt pada daftar.

Sebagai contoh:

// 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
pengguna3004826
sumber
24
Hanya untuk mencatat bahwa ElementAt () membutuhkan using System.Linq;.
ngm
16
Apakah ada keuntungan untuk ini daripada myList[0]notasi standar ?
AnalogWeapon
5
"Mengapa saya menggunakan Enumerable.ElementAt () versus operator []?" stackoverflow.com/questions/5326874/...
Lavande
3
.ElementAtOrDefault();
amit jha
@ AmnalogWeapon ya ada - Anda dapat menggunakannya sebagai bagian dari rantai pengaman nol, misalnya myCollectionWhichMightBeNull?.ElementAt(0)atau untuk melindungi elemen yang tidak ada:myCollection.ElementAtOrDefault(0)?.SomeProperty
Chris Peacock
18

Pertanyaan lama, tetapi saya melihat bahwa utas ini cukup baru-baru ini aktif, jadi saya akan melanjutkan dan melemparkan dua sen saya:

Persis seperti yang dikatakan Mitch. Dengan asumsi pengindeksan yang tepat, Anda bisa melanjutkan dan menggunakan notasi braket persegi seolah-olah Anda mengakses array. Selain menggunakan indeks numerik, jika anggota Anda memiliki nama tertentu, Anda dapat sering melakukan pencarian / akses simultan dengan mengetikkan sesuatu seperti:

var temp = list1["DesiredMember"];

Semakin banyak Anda tahu, bukan?

Xellarant
sumber
0

ListStruktur data .NET adalah Arraydalam "shell yang bisa berubah-ubah".

Jadi Anda dapat menggunakan indeks untuk mengakses elemen-elemennya seperti:

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

Dimulai dengan C # 8.0 yang dapat Anda gunakan Indexdan Rangekelas untuk mengakses elemen. Mereka menyediakan pengaksesan dari akhir urutan atau hanya mengakses bagian tertentu dari urutan:

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

Anda dapat menggabungkan indeks dan rentang bersama-sama:

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

Anda juga dapat menggunakan ElementAtmetode LINQ tetapi untuk 99% kasus ini benar-benar tidak perlu dan hanya solusi kinerja yang lambat.

picolino
sumber
0

Anda dapat menggunakan indeks untuk mengakses elemen daftar

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