Sprawdź, czy element na pozycji [x] istnieje na liście

88

Jeśli mam listę ciągów

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

i chcę wiedzieć, czy na przykład pozycja indeksu 2 zawiera element, czy można to zrobić w prosty sposób bez liczenia długości listy lub używania try catch?

Ponieważ to się nie powiedzie, mogę to obejść, próbując złapać, ale wydaje się to przesadne

if(list.ElementAt(2) != null)
{
   // logic
}
JGilmartin
źródło

Odpowiedzi:

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

ElementAtOrDefault () jest częścią System.Linqprzestrzeni nazw.

Chociaż masz listę, możesz użyć list.Count > 2.

Yuriy Faktorovich
źródło
4
Szybszy do odczytania niż zwykłe sprawdzenie .Count, ale należy pamiętać, że pozycje „null” są teoretycznie poprawne wewnątrz listy, więc nie należy na tym polegać przy zgłaszaniu wyjątku, jeśli test nie jest spełniony.
AFract
1
Możesz użyć ?? operator tj. list.ElementAtOrDefault(2)??defaultvalue
George Kargakis
12
if (list.Count > desiredIndex && list[desiredIndex] != null)
{
    // logic
}
Anthony Pegram
źródło
5
nawet jeśli lista.Count> pożądanyIndex jest spełniona, pobranie elementu spowoduje wyjątek, jeśli indeks <0
AFract
2
cóż, to czepianie się. pożądanyIndex będzie prawdopodobnie liczbą dodatnią. Jeśli to nie jest wiarygodne roszczenie, po prostu dodaj pożądanyIndex> -1 ..
TematX
@SubjectX - Nie dziurawić. Często używa się indeksu zwracanego przez IndexOf-1
Kyle Delaney
0
int? here = (list.ElementAtOrDefault(2) != 0 ? list[2]:(int?) null);
InGeek
źródło
1
Odpowiedzi zawierające tylko kod są odradzane, ponieważ nie wyjaśniają, jak rozwiązują problem. Zaktualizuj swoją odpowiedź, aby wyjaśnić, w jaki sposób poprawia to w stosunku do innych zaakceptowanych i pozytywnie ocenionych odpowiedzi, które już ma to pytanie. Również to pytanie ma 7 lat, twoje wysiłki byłyby bardziej docenione przez użytkowników, którzy ostatnio mieli pytania bez odpowiedzi. Proszę przejrzeć Jak napisać dobrą odpowiedź .
FluffyKitten