2016-04-23 5 views
1

Ich bin neu hier und ich würde etwas Hilfe bei der Liste wie ...Holen Sie sich alle Elemente Wert von Liste <x, y>

Eigentlich habe ich alle y Elemente meiner List<x, y> auf eine Variable hinzufügen möchten. Ich weiß, es ist wahrscheinlich sehr einfach, aber ich bin fest auf dem Teil ..

/// <summary> 
/// Number of cards in the deck 
/// </summary> 
public byte NbTotalCards 
{ 
    get 
    { 
     byte nbCards = 0; 

     for (byte i = 0; i <= this.LstCardsWithQt.Count; i++) 
     { 
      if (this.LstCardsWithQt[i].Qt != 0) 
      { 
       if(this.LstCardsWithQt[i].Qt.Equals(2)) 
        nbCards += 2; 
       else 
       { 
        nbCards += 1; 
       } 
      } 
      else 
      { 
       nbCards += 0; 
      } 
     } 
     return nbCardss; 
    } 
} 

Wo

public List<DeckEntry> LstCardsWithQt

und

public DeckEntry(Card card, byte qt) 
{ 
    this.Card = carte; 
    this.Qt = qt; 
} 

btw, ich einen Fehler auf this.LstCardsWithQt[i].Qt != 0

ArgumentOutOfRangeExeption ("Index war außerhalb des zulässigen Bereichs. Muss nicht negativ sein und kleiner als die Größe der Sammlung ")

+1

In der For-Schleife sollten Sie <= zu <ändern, da es nur Anzahl Elemente hat. – hazjack

+1

Sind Sie sicher, dass Sie "nbCards" nur um 1 erhöhen möchten, wenn das "Qt" eines Elements 3 oder mehr ist? Und warum das 'nbCards + = 0;' line? Es macht nichts Sinnvolles. Und warum 'Equals' verwenden, um Bytes anstelle von' == 'zu vergleichen? –

+1

Keine Liste . Liste Paparazzi

Antwort

5

Sie sind in einer falschen Weise durch Ihre Sammlung Looping. Statt

for (byte i = 0; i <= this.LstCardsWithQt.Count; i++) 

es

sein muss
for (byte i = 0; i < this.LstCardsWithQt.Count; i++) 

(Sie können auch die "dieses" Qualifier fallen, erscheint dies wie Java-Code)

Neuer Ansatz: Wenn Sie wollen zusammenzufassen nur die Eigenschaft card.Qt alle Karten Sie

public int NbTotalCards 
{ 
    get 
    { 
     return LstCardsWithQt.Sum(card => card.Qt); 
    } 
} 

tun können (proveded dass card.Qt nur Werte zwischen 0 und 2 hat, und es ist immer noch die gleichen Logik- ich mich auf die Art der Summe mehr ändern int anstelle von byte. Sie müssen auch using System.Linq am Anfang Ihrer Datei, wenn Sie das tun.)

+0

Dies ist die richtige Antwort. Ich wollte gerade dies schreiben und sah diese Antwort. – Arijoon

+0

Danke, die Summe funktioniert! –

Verwandte Themen