Проверить, существует ли элемент в позиции [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);
InGeek
источник
1
Ответы только на код не приветствуются, потому что они не объясняют, как они решают проблему. Обновите свой ответ, чтобы объяснить, как он улучшает другие принятые и получившие одобрение ответы на этот вопрос. Кроме того, этому вопросу 7 лет, ваши усилия будут более оценены пользователями, у которых недавно остались неотвеченные вопросы. Пожалуйста, просмотрите Как мне написать хороший ответ .
FluffyKitten