2016-04-23 1 views
1

Я новичок здесь, и я хотел бы получить некоторую помощь в списке ...Получить все элементы значение Списка <x, y>

На самом деле, я хочу, чтобы добавить каждые y элементов моей List<x, 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 вы должны изменить <= на <, потому что он имеет только элементы подсчета. – hazjack

+1

Вы действительно хотите увеличивать 'nbCards' на 1, если элемент' Qt' имеет значение 3 или больше? И почему эта строка '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, и это все та же логической единицы я позволил себе изменить тип суммы, int вместо byte. Вам также нужно using System.Linq в начале вашего файла, если вы это сделаете.)

+0

Это правильный ответ. Я как раз собирался написать это, а затем увидел этот ответ. – Arijoon

+0

Спасибо, сумма работает! –

Смежные вопросы