Überprüfen Sie, ob das Element an Position [x] in der Liste vorhanden ist

84

Wenn ich eine Liste von Zeichenfolgen habe

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

und ich möchte wissen, ob beispielsweise Indexposition 2 ein Element enthält. Gibt es eine einfache Möglichkeit, dies zu tun, ohne die Länge der Liste zu zählen oder einen try catch zu verwenden?

Da dies fehlschlagen wird, kann ich es mit einem Versuch fangen, aber das scheint übertrieben

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

Antworten:

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

ElementAtOrDefault () ist Teil des System.LinqNamespace.

Obwohl Sie eine Liste haben, können Sie diese verwenden list.Count > 2.

Yuriy Faktorovich
quelle
4
Schneller zu lesen als die reguläre .Count-Prüfung, aber bitte beachten Sie, dass "null" -Elemente innerhalb der Liste theoretisch gültig sind. Verlassen Sie sich also nicht darauf, um eine Ausnahme auszulösen, wenn der Test nicht erfüllt ist.
Nach dem
1
Sie können die ?? Betreiber dh. list.ElementAtOrDefault(2)??defaultvalue
George Kargakis
11
if (list.Count > desiredIndex && list[desiredIndex] != null)
{
    // logic
}
Anthony Pegram
quelle
5
Selbst wenn list.Count> gewünschterIndex erfüllt ist, wird beim Abrufen des Elements eine Ausnahme
ausgelöst,
2
Nun, das ist Nitpicking. gewünschter Index wird wahrscheinlich eine positive Zahl sein. Wenn dies keine verlässliche Behauptung ist, fügen Sie einfach den gewünschten Index> -1 hinzu.
SubjectX
@SubjectX - Nicht nitpicking. Es ist üblich, einen zurückgegebenen Index zu IndexOfverwenden, der -1 sein kann
Kyle Delaney
0
int? here = (list.ElementAtOrDefault(2) != 0 ? list[2]:(int?) null);
InGeek
quelle
Von Nur-Code-Antworten wird abgeraten, da sie nicht erklären, wie sie das Problem lösen. Bitte aktualisieren Sie Ihre Antwort, um zu erklären, wie sich dies gegenüber den anderen akzeptierten und positiv bewerteten Antworten verbessert, die diese Frage bereits hat. Außerdem ist diese Frage 7 Jahre alt. Ihre Bemühungen würden von Benutzern, die kürzlich unbeantwortete Fragen haben, mehr geschätzt. Bitte überprüfen Sie, wie ich eine gute Antwort schreibe .
FluffyKitten