Проверить, существует ли элемент в позиции [x] в списке


88

Если у меня есть список строк

List<String> list = new list<String>();
list.add("str1");
list.add("str2");
list.add("str3");

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

Поскольку это не удастся, я могу обойти это с помощью try catch, но это кажется чрезмерным

if(list.ElementAt(2) != null)
{
   // logic
}

Ответы:


216
if(list.ElementAtOrDefault(2) != null)
{
   // logic
}

ElementAtOrDefault () является частью System.Linqпространства имен.

Хотя у вас есть List, вы можете использовать list.Count > 2.


4
Быстрее читается, чем обычная проверка .Count, но учтите, что "нулевые" элементы теоретически допустимы внутри списка, поэтому не полагайтесь на это, чтобы генерировать исключение, если проверка не выполняется.
AFract

1
Вы можете использовать ?? оператор т.е. list.ElementAtOrDefault(2)??defaultvalue
Джордж Каргакис

12
if (list.Count > desiredIndex && list[desiredIndex] != null)
{
    // logic
}

5
даже если list.Count> желаемыйIndex удовлетворен, получение элемента вызовет исключение, если index <0
AFract

2
ну вот и придирки. ЖелаемыйИндекс, вероятно, будет положительным числом. Если это не достоверное утверждение, просто добавьте желаемыйIndex> -1 ..
SubjectX

@SubjectX - Не придираюсь. Обычно используется индекс, возвращаемый с помощью IndexOfкоторого может быть -1
Кайл Делани

0
int? here = (list.ElementAtOrDefault(2) != 0 ? list[2]:(int?) null);

1
Ответы только на код не приветствуются, потому что они не объясняют, как они решают проблему. Обновите свой ответ, чтобы объяснить, как он улучшает другие принятые и получившие одобрение ответы на этот вопрос. Кроме того, этому вопросу 7 лет, ваши усилия будут более оценены пользователями, у которых недавно остались неотвеченные вопросы. Пожалуйста, просмотрите Как мне написать хороший ответ .
FluffyKitten
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.