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

321

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

list1.get(0);

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

user1909486
источник
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
user3004826
источник
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
Крис Пикок
27

Visual Basic, C # и C ++ имеют синтаксис для доступа к свойству Item без использования его имени. Вместо этого переменная, содержащая список, используется как массив.

List[index]

См. Например: https://msdn.microsoft.com/en-us/library/0ebtbkkc(v=vs.110).aspx

Зеяд Кунис
источник
18

Старый вопрос, но я вижу, что эта тема была относительно недавно активна, поэтому я добавлю два моих цента:

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

var temp = list1["DesiredMember"];

Чем больше ты знаешь, верно?

Xellarant
источник
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% случаев это действительно не нужно, а просто решение с низкой производительностью.

Picolino
источник
0

Вы можете использовать индекс для доступа к элементам списка

List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
Codemaker
источник