Montag, Januar 27, 2020

Wie um zu überprüfen, ob ein Wert in einer Liste vorhanden ist (vor get out of range)

Habe ich diese Liste :

IList<Modulo> moduli = (from Modulo module in Moduli
                       select module).ToList();

und ich fahren mit für (Mitteilung i=i+2) :

for(int i=0; i<moduli.Count; i=i+2)
{
}

nun, ich habe zu prüfen, ob moduli[i+1] existieren, (so, das nächste element), sonst ich werde eine System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection..

Wie kann ich es überprüfen? Versucht mit :

if(moduli[i+1] != null) 
{
}

aber es nicht funktioniert!

  • Um zu beginnen, ändern Sie die loop-Zustand zu i<moduli.Count (nicht <=).
  • richtig! danke! 😉
InformationsquelleAutor markzzz | 2012-01-18

5 Kommentare

  1. 7

    Überprüfen Sie auf die gleiche Weise, wie Sie Ihre Schleife Zustand:

    if(i + 1 < moduli.Count) //it exists

    Hinweis: die < statt <=, das ist ein Fehler im ursprünglichen code.

    • Yeah, was für eine dumme! Es funktioniert 🙂 vielen Dank
  2. 5

    Wie etwa:

    if (i + 1 < moduli.Count)
    {
      var modulo = moduli[i+1]; //this is safe
    }

    sollte dies nicht der Fall sein, wenn Sie Ihre i+1 bewirkt eine ArgumentOutOfRangeException –

    Übrigens, der Grund, warum dies nicht funktioniert:

    if(moduli[i+1] != null) 

    ist, dass die ArgumentOutOfRangeException wird ausgelöst, sobald Sie den check.

  3. 0

    Linq kann die Arbeit für Sie tun 🙂

    IList<Modulo> moduli = Moduli.Where((item, index) => ((index % 2) == 0)).
                                  ToList();
  4. 0

    Sehr einfach:

    for(int i=0; i<moduli.Count - 2; i=i+2) { }
    • Nein! Dies wird ignoriert 1 Schritt!
    • Dann fügen Sie eine zusätzliche if(moduli[moduli.Länge-1] != null) { } außerhalb der Schleife! Warum sollten Sie extra, wenn Kontrollen in der Schleife, die verlangsamen die Leistung?

Kostenlose Online-Tests