C# message d'erreur pas assez explicite pour moi

Thomas33 -  
 Utilisateur anonyme -
Bonjour,

J'ai un problème avec mon code et je n'arrive pas à l'identifier.
On me dit : "exception levée"
"System.NullReferenceException:'La référence d'objet n'est pas définie à une instance d'objet'

On me dit l'erreur à la ligne 28

Voici mon code:

static void Main(string[] args) 
{
    public class Rectangle 
{
    private float longueur;
    private float largeur;

    public Rectangle() 
    {
    }

    public Rectangle(float longueur, float largeur) 
    {
        this.longueur = longueur;
        this.largeur = largeur;
    }

    public float surface() 
    {
        return longueur * largeur;
    }

    private static float sommeSurface(List<Rectangle> rectangles) 
    {
        float totalSurface= 0;
        foreach(Rectangle rectangle in rectangles) 
        {
            totalSurface += rectangle.surface();
        }
        return totalSurface;
    }
}
}   


Configuration: Windows / Opera 83.0.4254.70

5 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    es-tu certain d'avoir partagé ton code complet?
    0
  2. Thomas33
     
    En vrai, c'est quelque chose comme ça :
    (Pour la fonction d'en bas, je n'arrivais pas à la coller à gauche de peur que ça ne marche plus du tout)

    public class Rectangle 
    {
        private float longueur;
        private float largeur;
    
        public Rectangle() 
        {
        }
    
        public Rectangle(float longueur, float largeur) 
        {
            this.longueur = longueur;
            this.largeur = largeur;
        }
    
        public float surface() 
        {
            return longueur * largeur;
        }
    }
    
        private static float sommeSurface(List<Rectangle> rectangles) 
        {
            float totalSurface= 0;
            foreach(Rectangle rectangle in rectangles) 
            {
                totalSurface += rectangle.surface();
            }
            return totalSurface;
        }
    
    0
  3. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Bonjour,

    En effet, l'erreur vient certainement du code que tu n'as pas montré.
    Ta
    List
    de
    Rectangle
    contient un ou des
    Rectangle
    qui est resté
    null
    . Chaque élément dans ta
    List
    doit impérativement être un
    Rectangle
    initialisé.
    0
  4. Thomas33
     
    Tu penses qu'il faudrait que je modifie quoi dans ma fonction pour régler le problème ?
    0
    1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
       
      Rien n'est à changer dans le code que tu as montré.
      Les changements sont dans le code que tu ne montres pas. Dans le code montré, la fonction
      Rectangle.sommeSurface()
      n'est pas appelée, hors c'est le paramètre passé lors de l'appel qui est le problème.
      0
      1. GnacGnouc > Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention  
         
        Et si c'était la fonction sommeSurface qu'il fallait que je modifie ?

        Mais je ne saurais pas quoi modifier.
        0
      2. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102 > GnacGnouc
         
        Pour le moment, la fonction
        sommeSurface()
        calcule la somme des surfaces de la
        List
        de
        Rectangle
        qui lui est passée.
        Tu peux la transformer en ne sommant que les
        Rectangle
        valides. C'est n'importe quoi, une fonction qui ne reçoit pas des paramètres valides ne peut pas faire quelque chose de sensé, ça serait:
            private static float sommeSurface(List<Rectangle> rectangles) 
            {
                float totalSurface = 0;
                foreach ( Rectangle rectangle in rectangles )
                {
                    if ( rectangle != null )
                        totalSurface += rectangle.surface();
                }
                return totalSurface;
            }
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    Bonjour Thomas.

    Comme tu ne sembles pas comprendre la "portée" de ton problème.
    Je te propose de mettre un point d'arrêt à la ligne
    float totalSurface = 0;
    

    Et avec les outils de déboggage, de regarder le contenu de la variable "rectangles"

    Et là, peut-être tu comprendras ce que Dalfab (que je salue au passage) essaye de t'expliquer, et je cite
    En effet, l'erreur vient certainement du code que tu n'as pas montré.
    ou encore
    C'est n'importe quoi, une fonction qui ne reçoit pas des paramètres valides ne peut pas faire quelque chose de sensé
    0