2016-04-23 43 views
1

的所有元素的值我是新來的,我想一些幫助列表...獲取列表<x, y>

其實,我想我的List<x, y>一個變量的每y元素添加。我知道,它可能很容易,但我卡在那一部分..

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

順便說一句,我得到this.LstCardsWithQt[i].Qt != 0錯誤

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代碼)

新方法:如果您只是要總結的所有卡的屬性card.Qt你可以做

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

(proveded是card.Qt只有0和2之間的值,它仍然同樣的邏輯 - 我讓自己總結的類型更改爲而不是byte。如果這樣做,您還需要在文件的開始處使用using System.Linq。)

+0

這是正確的答案。我正要寫這個,然後看到了這個答案。 – Arijoon

+0

謝謝,Sum作品! –