Получение элемента списка по индексу


321

Я недавно начал использовать c #, переходя с Java. Я не могу найти, как получить элемент списка по индексу. В Java, чтобы получить первый элемент списка, это будет:

list1.get(0);

Что эквивалентно в C #?


4
См. Stackoverflow.com/questions/5326874/… для некоторого обсуждения относительно того, использовать ли оператор [] или метод ElementAt ().
НГМ

Ответы:


362
list1[0];

Предполагая, что для типа списка определен индексатор.


5
Единственный ответ, который объясняет, почему можно получить доступ к списку, который является объектом, например массивом
PrashanD

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

1
@ Пол МакКарти: вы могли бы легко проверить это сами, но да. Список содержит ссылки на объекты. Очистка списка не влияет на объекты, содержащиеся в нем. Если нет других ссылок на эти объекты, они будут собираться мусором в определенный момент времени.
Mitch Wheat

242

Вы можете использовать метод расширения 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;.
НГМ

16
Есть ли в этом преимущество перед стандартными myList[0]обозначениями?
Аналоговое оружие

5
"Зачем мне использовать Enumerable.ElementAt () против оператора []?" stackoverflow.com/questions/5326874/…
Лаванде

3
.ElementAtOrDefault();
amit jha

@AnalogWeapon да, есть - вы можете использовать его как часть нулевой безопасной цепочки, например, myCollectionWhichMightBeNull?.ElementAt(0)или для защиты от несуществующего элемента:myCollection.ElementAtOrDefault(0)?.SomeProperty
Крис Пикок


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.