Bir liste öğesini dizine göre alma


321

Geçenlerde Java üzerinden c # taşıma kullanmaya başladım. Bir liste öğesini dizine nasıl alacağımı bulamıyorum. Java'da listenin ilk öğesini almak için:

list1.get(0);

C # 'de eşdeğeri nedir?


4
[] Operatörünün veya ElementAt () yönteminin kullanılıp kullanılmayacağı konusunda tartışma için stackoverflow.com/questions/5326874/… adresine bakın .
ngm

Yanıtlar:


362
list1[0];

Listenin türünün tanımlanmış bir dizinleyici olduğu varsayılarak.


5
Dizi gibi bir nesne olan bir listeye erişmenin neden mümkün olduğunu açıklayan tek cevap
PrashanD

Listedeki nesnenin bir kopyasını döndürüyor mu? obj = liste [0]; list.clear (); // obj hala doldurulacak mı?
Paul McCarthy

1
@ Paul McCarthy: Bunu kendiniz kolayca test edebilirsiniz, ancak Evet. Bir liste, nesnelere referanslar içerir. Listenin temizlenmesi, içinde tutulan nesneleri etkilemez. Bu nesnelere başka atıflar yoksa, bunlar belirli bir zamanda toplanan çöp olacaktır.
Mitch Wheat

241

Listedeki ElementAt uzantı yöntemini kullanabilirsiniz.

Örneğin:

// 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
Sadece ElementAt () gerektirdiğini unutmayın using System.Linq;.
ngm

16
Standart myList[0]gösterime göre bunun bir avantajı var mı ?
Ocak'ta AnalogWeapon

5
"Neden [] operatörüne karşı Enumerable.ElementAt () yöntemini kullanayım?" stackoverflow.com/questions/5326874/…
Lavande

3
.ElementAtOrDefault();
amit jha

@AnalogWeapon evet var - boş bir güvenli zincirin parçası olarak kullanabilirsiniz, örneğin myCollectionWhichMightBeNull?.ElementAt(0)veya mevcut olmayan bir öğeye karşı korumak için:myCollection.ElementAtOrDefault(0)?.SomeProperty
Chris Peacock


18

Eski soru, ama bu konunun oldukça yakın zamanda aktif olduğunu görüyorum, bu yüzden devam edip iki sentimi atacağım:

Mitch'in söylediklerini tam olarak söylediler. Doğru indeksleme varsayarsak, bir diziye erişiyormuşsunuz gibi köşeli parantez gösterimini kullanabilirsiniz. Bununla birlikte, sayısal dizini kullanmaya ek olarak, üyeleriniz belirli adlara sahipse, genellikle aşağıdaki gibi bir şey yazarak aynı anda bir arama / erişim yapabilirsiniz:

var temp = list1["DesiredMember"];

Ne kadar çok bilirsen, değil mi?


0

.NET Listveri yapısı Arraybir "değiştirilebilir kabuk" içinde.

Böylece, aşağıdaki gibi öğelere erişmek için dizinleri kullanabilirsiniz:

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

C # 8.0 ile başlayarak Indexve Rangeelemanlara erişmek için sınıfları kullanabilirsiniz . Sekansın sonundan erişim sağlar veya sadece sekansın belirli bir kısmına erişir:

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

Dizinleri ve aralıkları birlikte birleştirebilirsiniz:

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

Ayrıca LINQ ElementAtyöntemini kullanabilirsiniz, ancak vakaların% 99'u için bu gerçekten gerekli değildir ve sadece yavaş performans çözümü değildir.


0

liste öğelerine erişmek için dizini kullanabilirsiniz

List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.