Отримання елемента списку за індексом


321

Нещодавно я почав використовувати c # перехід із Java. Здається, я не можу знайти, як отримати елемент списку за індексом. У java, щоб отримати перший пункт списку, було б:

list1.get(0);

Який еквівалент c #?


4
Див stackoverflow.com/questions/5326874 / ... для деякого обговорення щодо того , щоб використовувати оператор [] або метод ElementAt ().
ngm

Відповіді:


362
list1[0];

Припустимо, що тип списку визначений індексатором.


5
Єдина відповідь, яка пояснює, чому можна отримати доступ до списку, який є об’єктом, як масив
PrashanD

Чи повертає він копію об’єкта у списку? obj = список [0]; list.clear (); // буде obj все ще заселений?
Пол Маккарті

1
@Paul McCarthy: ти можеш сам це перевірити, але так. У списку містяться посилання на об'єкти. Видалення списку не впливає на об'єкти, що знаходяться в ньому. Якщо немає інших посилань на ці об’єкти, вони будуть збирати сміття в якийсь момент часу.
Мітч Пшеничний

241

Ви можете використовувати метод розширення ElementAt у списку.

Наприклад:

// 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
Просто зазначимо, що ElementAt () вимагає using System.Linq;.
ngm

16
Чи є якась перевага в цьому перед стандартними myList[0]позначеннями?
AnalogWeapon

5
"Чому я використовую Enumerable.ElementAt () проти оператора []?" stackoverflow.com/questions/5326874/…
Лаванда

3
.ElementAtOrDefault();
amit jha

@AnalogWeapon є так - ви можете використовувати його як частину нульової безпечної ланцюга, наприклад, myCollectionWhichMightBeNull?.ElementAt(0)або для захисту від неіснуючого елемента:myCollection.ElementAtOrDefault(0)?.SomeProperty
Chris Peacock,


18

Старе питання, але я бачу, що ця тема була нещодавно активною, тому я продовжую і кидаю два центи:

Досить точно те, що сказав Мітч. Якщо припустити правильну індексацію, ви можете просто йти вперед і використовувати позначення квадратних дужок, як якщо б ви отримували доступ до масиву. Окрім використання числового індексу, якщо ваші члени мають конкретні імена, ви можете часто робити одночасний пошук / доступ, ввівши щось на зразок:

var temp = list1["DesiredMember"];

Чим більше ви знаєте, правда?


0

ListСтруктура даних .NET - це Array"змінна оболонка".

Таким чином, ви можете використовувати індекси для доступу до таких елементів, як:

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

Починаючи з C # 8.0, ви можете використовувати Indexта Rangeкласи для доступу до елементів. Вони забезпечують доступ з кінця послідовності або просто доступ до певної частини послідовності:

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

Ви можете комбінувати індекси та діапазони разом:

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

Крім того, ви можете використовувати ElementAtметод LINQ, але для 99% випадків це дійсно не потрібно, і це просто рішення з низькою продуктивністю.


0

ви можете використовувати індекс для доступу до елементів списку

List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.