Controlla se l'elemento alla posizione [x] esiste nell'elenco


91

Se ho un elenco di stringhe

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

e voglio sapere se per esempio la posizione dell'indice 2 contiene un elemento, c'è un modo semplice per farlo senza contare la lunghezza dell'elenco o usare un tentativo di cattura?

Poiché questo fallirà, posso aggirare il problema con un tentativo di cattura, ma questo sembra eccessivo

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

Risposte:


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

ElementAtOrDefault () fa parte dello System.Linqspazio dei nomi.

Sebbene tu abbia una lista, puoi usare list.Count > 2.


4
Più veloce da leggere rispetto al normale controllo .Count, ma tieni presente che gli elementi "null" sono teoricamente validi all'interno della lista, quindi non fare affidamento su questo per generare un'eccezione se il test non è soddisfatto.
AFract

1
Puoi usare ?? operatore ie. list.ElementAtOrDefault(2)??defaultvalue
George Kargakis

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

5
anche se list.Count> desideratoIndex è soddisfatto, il recupero dell'elemento genererà un'eccezione se index <0
AFract

2
bene, questo è il pelo nell'uovo. desideratoIndex sarà probabilmente un numero positivo. Se questa non è un'affermazione affidabile, aggiungi semplicemente wishIndex> -1 ..
SubjectX

1
@SubjectX - Non pignolo. È comune utilizzare un indice restituito da IndexOfche può essere -1
Kyle Delaney

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

2
Le risposte di solo codice sono scoraggiate perché non spiegano come risolvono il problema. Aggiorna la tua risposta per spiegare come questo migliora rispetto alle altre risposte accettate e votate a favore di questa domanda già. Inoltre, questa domanda risale a 7 anni fa, i tuoi sforzi sarebbero più apprezzati dagli utenti che hanno recenti domande senza risposta. Si prega di rivedere Come scrivo una buona risposta .
FluffyKitten
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.