C# message d'erreur pas assez explicite pour moi

Fermé
Thomas33 - 24 mars 2022 à 13:21
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 - 26 mars 2022 à 08:40
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

yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
24 mars 2022 à 13:35
bonjour,
es-tu certain d'avoir partagé ton code complet?
0
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
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
24 mars 2022 à 13:45
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
Tu penses qu'il faudrait que je modifie quoi dans ma fonction pour régler le problème ?
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
24 mars 2022 à 18:12
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
GnacGnouc > Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023
25 mars 2022 à 13:44
Et si c'était la fonction sommeSurface qu'il fallait que je modifie ?

Mais je ne saurais pas quoi modifier.
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101 > GnacGnouc
25 mars 2022 à 20:05
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 928
26 mars 2022 à 08:40
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