2016-04-23 29 views
1

リスト のすべての要素の値を取得します。私はところで、私は this.LstCardsWithQt[i].Qt != 0上のエラーを取得する </p> <p>が実は、私は私の<code>List<x, y></code>への変数のすべての<code>y</code>要素を追加したい...私はここに新たなんだと私はリストといくつかの助けをしたいと思い

/// <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; 
    } 
} 

どこ

public List<DeckEntry> LstCardsWithQt

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

...それはおそらく非常に簡単ですが、私はその部分にこだわっている、知っています

ArgumentOutOfRangeExeption( "索引が範囲外でした。あなたは間違った方法であなたのコレクションをループしている 負でないコレクションのサイズよりも小さい」)

+1

forループでは、Count要素のみを持つため、<=を<に変更する必要があります。 – hazjack

+1

アイテムの 'Qt'が3以上であれば' nbCards'を1だけインクリメントしますか?なぜ、 'nbCards + = 0;'行?それは何も役に立たない。なぜ '=='の代わりに 'Equals'を使ってバイトを比較するのですか? –

+1

リストなし。リスト Paparazzi

答えて

5

でなければなりません。その代わり

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

のそれは

なければなりません

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

新しいアプローチ(あなたはまた、「この」修飾子をドロップすることができますが、これはJavaコードのように思える):あなたの場合ちょうどあなたが

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

を行うことができ、すべてのあなたのカードのプロパティcard.Qtを総括したい(card.Qtは0と2の間の値のみを持っており、それはまだ私は自分自身に和の種類を変更することができ、同じいるロジックだとproveded byteの代わりにintまた、ファイルの先頭にusing System.Linqが必要です。

+0

これは正解です。私はこれを書こうとしていたところで、この答えを見た。 – Arijoon

+0

ありがとうございます、合計が動作します! –

関連する問題

 関連する問題