ArgumentOutofRangeException
Random r = new Random();
int InvadorNumberA=r.Next(0,5);
int randomShot = r.Next(5);
List<Invaders> invadersShooting = new List<Invaders>();
Invaders invaderA=new Invaders();
var invaderByLocationX = from invadersSortByLocation in invaders
group invadersSortByLocation by invadersSortByLocation.Location.Y
into invaderGroup
orderby invaderGroup.Key
select invaderGroup;
invadersShooting = invaderByLocationX.Last().ToList();
try
{
invaderA = invadersShooting[InvadorNumberA];//constantly being thrown there. i cant catch the exception.. so i guess it is being thrown somewhere else. any idea on how i stop it from being thrown?
}
catch(ArgumentOutOfRangeException dd)
{
invaderA = invadersShooting[0];
}
Trace de la pile
" au Système.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource de ressources)\r\n au Système.ThrowHelper.ThrowArgumentOutOfRangeException()\r\n au Système.Les Collections.Génériques.Liste`1.get_Item(Int32 index)\r\n à WindowsFormsApplication1.Jeu.ReturnFire() dans D:\Documents and Settings\Dima\Mes Documents\Visual Studio 2008\Projects\SpaceInvaders\SpaceInvaders\SpaceInvadorGame\Jeu.cs:ligne 444"
Site Cible
{Void ThrowArgumentOutOfRangeException(Système D'.ExceptionArgument, Système.ExceptionResource)}
Plus d'infos:
{"Index was out of range. Must be non-negative and less than the size of the collection.\r\nParameter name: index"}
{"Index était hors de portée. Doit être non négatif et inférieur à la taille de la collection.\r\nParameter nom: index"}
je me suis débarrassé de l'exception simplement en faisant ce
invadersShooting = invaderByLocationX.Last().ToList();
invaderA = invadersShooting[r.Next(0,invadersShooting.Count)];
mais je suis toujours curieux,où l'exception a été levée..hmmm
OriginalL'auteur Dmitry Makovetskiyd | 2011-04-15
Vous devez vous connecter pour publier un commentaire.
Ne pas le faire.
Exceptions doivent être exceptionnelle. Vous avez tous les moyens pour empêcher cette exceptionnelle scénario et vous devrait absolument.
Dans le premier cas,
InvadorNumberA
peut être quelque chose de 0 à 4. Vérifier et voir si la liste a au moinsInvadorNumberA + 1
éléments avant d'essayer d'obtenir un élément de. Ne pas se prévaloir d'une exception à la correction de vos cours. Plus que cela, peut-êtreInvadorNumberA
devrait en fait être contraint derandom.Next(0, list.Count)
. Pourquoi créer un nombre de 0 à 4, lorsqu'il peut y avoir seulement 1 ou 2 éléments dans la liste?Avec votre correction, vous devriez toujours vérifier le comte. Votre liste pourrait être vide.
random.Next(0, 0)
sera de retour 0 (je m'attendais à une bombe). Dans une liste vide, il n'y aura aucun élément à l'indice 0. Valider!OriginalL'auteur Anthony Pegram
Il peut être projeté à nouveau en vous bloc catch, comme il n'est pas garanti que la taille de la liste est au moins 1.
Il pourrait être le Énumérable.Dernier appel, mais dans la documentation, il ne dit pas qu'il faut jeter un ArgumentOutOfRangeException
définissez votre IDE pour briser toutes les exceptions. (Ctrl+Alt+E devrait vous permettre de le faire.) Déboguer le code et de voir où ça se passe et ce que vous avez entrées sont. De l'index, la liste, c'est compter, etc.
Ne changeaient votre environnement de développement vous dire où l'exception a été levée? si elle ne collez l'emplacement.
j'ai ajouté un peu de détails et fait ce que vous m'avez dit de faire
OriginalL'auteur Yet Another Geek
Si
invadersShooting
est la liste vide, vous obtenez une exception dans letry
gestionnaire. Vous pourrez attraper cette exception dans lecatch
gestionnaire. Cependant, vous avez alors une fois de plus l'index dans la liste vide et une nouvelle exception est levée, cette fois dans lecatch
gestionnaire. Cette exception n'est pas pris et vous avez une exception non gérée.Il vous suffit d'inspecter
invadersShooting.Count
avant d'essayer de l'obtenir d'un élément.OriginalL'auteur Martin Liversage