8
votes

Exception étrange lorsque vous utilisez ConcurrentStack en C #

J'ai ce code C #, il jette un argumentoutofrangeException , je me demande pourquoi? XXX

Le message Message de la propriété ArgumentOpofRangeException Erreur:

L'argument Startindex doit être supérieur ou égal à zéro.

Nom du paramètre: startindex

Le tableau est vide mais pas null , je ne m'attendais à aucune exception, juste que rien n'a été ajouté à la pile. Est-ce une exception raisonnable ou non?


3 commentaires

Que se passe-t-il si vous myINTS [0] = 0; avant d'appeler pushrange ?


Est-ce que cela fonctionne avec une implémentation différente de pile ?


@Yahia: Cela lui donnerait un indexautofrangeException car la matrice a une capacité de zéro.


3 Réponses :


2
votes

L'argument à Addrange est un tableau vide, vous essayez donc de pousser des éléments zéro sur la pile. C'est donc une exception très raisonnable.

Edit: Mais vous avez raison, c'est un message d'exception incorrecte. Vous pouvez deviner que c'est parce que, à l'interne, la pinceur de surcharge (T [], int32, int32) jette réellement l'exception.


2 commentaires

Oui, mais pourquoi est-il "si mauvais" de pousser un tableau vide? Vous n'obtiendrez pas d'exception lorsque vous ajoutez un tableau vide à une liste via Addrange ().


@TTT clairement juste une décision arbitraire faite par une personne qui n'avait pas d'utilisation réelle de poussoir dans la pratique.



2
votes

Si le tableau est vide, il n'a aucun index 0, ce qui se plaint.

avec un index à base de zéro, 0 est le premier index, pointant vers le premier élément. Donc, il se plaint de qu'il n'y a rien dans le tableau.


0 commentaires

3
votes

d'une perspective de mise en œuvre , c'est raisonnable si vous regardez la définition du puntrange (t [], int, int) surcharge :

argumentOfrangeExceptionXception: startindex ou compte est négatif. Ou startindex est supérieur ou égal à la longueur des éléments.

La longueur de votre matrice est zéro. Par conséquent, il n'y a pas de valeur valide possible pour startindex .

d'une perspective de documentation , ce n'est pas raisonnable, car la documentation du La surcharge de la pousseuse (t []) ne mentionne pas le argumentoutofrangeException .


1 commentaires

Ce n'est pas raisonnable, période.