2016-03-05 3 views
0

Итак, я сделал этот метод, чтобы определить, есть ли что-либо перед игроком при нажатии кнопки, проблема в том, что даже жесткий такой же метод без параметр out (он возвращает того, кто находится перед игроком), кажется, работает, этот вызывает недопустимое исключение литья, хотя я исследовал, что до сих пор не знаю, в чем проблема.C# Invalid Cast exception (я не знаю, где ошибка)

Проблемный код функции:

public bool isThereAnythingThere(Rectangle rec, out NPC other) { 
    bool tmp = false; 
    other = null; 

    foreach (NPC npc in gol) 
    { 
     if (npc.collider.Intersects(rec)) 
     { 
      tmp = true; 
      other = npc; 
     } 
    } 
    return tmp; 
} 

функция игрока, который вызывает его:

void Action1() 
{ 
    NPC go = null; 

    switch (facingDirection) { 
     case Direction.Up: if (!game.isThereAnythingThere(UpRectangle), out go) ; 
      break; 
     case Direction.Down: if (!game.isThereAnythingThere(DownRectangle), out go) ; 
      break; 
     case Direction.Left: if (!game.isThereAnythingThere(LeftRectangle), out go) ; 
      break; 
     case Direction.Right: if (!game.isThereAnythingThere(RightRectangle), out go) ; 
      break; 
     } //Now go equals the object in the direction where facing, if theres no object, is null 

     if (go != null) 
      game.textBox.AddText(go.GetDialogue()); 
    } 
} 

PS: gol список всех GameObject с в моей игре; GameObject - это класс, из которых как Player, так и NPC унаследовать.

+0

Какой тип 'gol'? Если это не перечислимое «NPC», то «foreach» вызовет этот тип исключения. –

+0

Когда вы отлаживаете и продвигаете линию за строкой, какая строка выдает ошибку? – Seano666

+1

StackTrace исключения должен предоставить вам необходимую информацию. Если нет, обновите свой код, чтобы быть полной минимальной программой, необходимой для воспроизведения проблемы. – bmm6o

ответ

2

Ваша проблема в том, что вы повторяете список, который может содержать что-то, что не является NPC, и сообщает foreach, чтобы попытаться отличить все до NPC.

Самое простое решение было бы использовать Linq OfType<T>, чтобы отфильтровать список по типу:

foreach (NPC npc in gol.OfType<NPC>())