IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Erreur de liste : System.ArgumentOutOfRangeException


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Economiste
    Inscrit en
    Avril 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2019
    Messages : 18
    Par défaut Erreur de liste : System.ArgumentOutOfRangeException
    Bonsoir,

    J'ai beau chercher mais rien ne m'apporte de réponse. Un de mes codes contenant une liste marchait parfaitement sous C# 8.0 mais me renvoie une erreur sous la 9.0. Voici ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    public class Person
        {
            public string Firstname { get; set; }
            public string Lastname { get; set; }
            public int Age { get; set; }
        }
     
        public class Program_list
        {
            public List<Person> Person { get; set; } = new List<Person>();
     
            public void List_method()
            {
                Person data = new Person();
     
                Person[0].Firstname = "Prénom1";
                Person[0].Lastname = "Nom1";
                Person[0].Age = 30;
     
                Person[1].Firstname = "Prénom2";
                Person[1].Lastname = "Nom2";
                Person[1].Age = 26;
     
                Person[2].Firstname = "Prénom3";
                Person[2].Lastname = "Nom3";
                Person[2].Age = 26;
     
                Person.Add(data);
            }
     
            public List<Person> GetList()
            {
                return Person;
            }
        }
     
        public class Program_class
        {
            public void Main_method()
            {
                Program_list progList = new Program_list();
                progList.List_method();
     
                var person = progList.Person;
     
                foreach (var i in person)
                {
                    Console.WriteLine(i);
                }
            }
        }
    Le message suivant s'affiche à la ligne 16 :

    System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection. '
    Je me dis qu'il y aurait peut être un argument à ajouter à la 9.0. De plus s'il n'y a pas GetList(), Visual Studio me renvoie l'erreur CS1061, alors que j'ai un code similaire mais avec une déclaration par boucle, qui me renvoie seulement l'erreur sur l'index citée plus haut. Pourquoi ?

    Merci encore pour votre aide. Je souhaite à tous une bonne soirée

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 440
    Par défaut
    Bonjour,
    Tu utilises le même nom pour la classe (à la ligne 1) et pour la liste (ligne 10).
    C'est source de confusion, et justement le problème est là.
    Ligne 10, tu instancies une liste qui s'appelle Person.
    Ligne 14, tu récupères une instance de Person (la classe), mais tu n'en fais pas grand chose.
    Ligne 16, tu accèdes au premier élément de Person (la liste). Mais cette dernière est encode vide, d'où l'erreur.
    Tu n'ajoutes un élément (data) qu'à la ligne 28. D'ailleurs cet élément est vide…

    Je commencerai par utiliser un nom différent pour la classe Person et la liste (Persons ? PersonList ?)
    Ensuite il faut ajouter les éléments avec un add:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PersonList.add(new Person()
        {
            FirstName='',
            LastName='',
            Age = 0
        }
    );
    Tatayo.

  3. #3
    Membre averti
    Homme Profil pro
    Economiste
    Inscrit en
    Avril 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2019
    Messages : 18
    Par défaut
    Bonjour Tatayo, merci pour ta réponse, mais j'ai du mal à comprendre.

    - Dans le cas où il y aurait plusieurs personnes à référencer, comment utiliser le code que tu as fourni ?
    - Comment choisir l'index dans lequel on souhaite insérer la valeur ?
    - Et pourquoi au lancement le programme affiche : Multidimensional_List.Person ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 440
    Par défaut
    Citation Envoyé par Devellopy Voir le message
    - Dans le cas où il y aurait plusieurs personnes à référencer, comment utiliser le code que tu as fourni ?
    Il suffit de faire un appel à la méthode add pour chaque élément.
    Tu peux aussi utiliser la méthode AddRange() pour le faire en une seule fois.
    Citation Envoyé par Devellopy Voir le message
    - Comment choisir l'index dans lequel on souhaite insérer la valeur ?
    Comme il s'agit d'une liste, les éléments sont dans l'ordre d'insertion. Tu peux tout à fait la trier, mais (à ma connaissance) pas forcer l'indice d'un élément particulier.
    Pour çà tu peux utiliser une SortedList, avec comme clé l'indice que tu veux utiliser.
    Citation Envoyé par Devellopy Voir le message
    - Et pourquoi au lancement le programme affiche : Multidimensional_List.Person ?
    Aucune idée.

    Tatayo.

  5. #5
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Pour ajouter un élément à un index précis tu as la méthode List.Insert, mais tu seras limité aux index déjà présents +1 (pour ajouter à la fin). Cependant s'il s'agit juste d'initialiser la liste List.Add (ou AddRange si tu as déjà tes éléments) convient parfaitement. Par ailleurs ta méthode List_method qui fait de l'initialisation a sa place dans le constructeur ; et tu n'as pas besoin de GetList() puisque tu as déjà un getter sur ta propriété Person.

Discussions similaires

  1. System.ArgumentOutOfRangeException est l'erreur
    Par christianf dans le forum C#
    Réponses: 6
    Dernier message: 15/03/2008, 19h19
  2. Erreur c# : PostgreSQL : System.FormatException
    Par cnguyen dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/08/2007, 12h26
  3. Réponses: 2
    Dernier message: 04/07/2006, 09h37
  4. [PHP-JS] gestion des erreurs sur liste déroulente
    Par HwRZxLc4 dans le forum Langage
    Réponses: 9
    Dernier message: 28/05/2006, 03h21
  5. [c#] un erreur dans le system.drawing...
    Par pointer dans le forum DirectX
    Réponses: 3
    Dernier message: 13/07/2005, 20h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo