haddreezy
Messages postés40Date d'inscriptionlundi 14 mai 2012StatutMembreDernière intervention 8 août 2012
-
23 mai 2012 à 12:25
haddreezy
Messages postés40Date d'inscriptionlundi 14 mai 2012StatutMembreDernière intervention 8 août 2012
-
23 mai 2012 à 16:58
Bonjour,
j'ai écrit un programme en c# pour un projet, il a l'air de correctement fonctionner mais j'ai toujours la même phrase à la fin dans ma fenêtre console "la référence d'objet n'est pas définie à une instance d'un objet". Pourtant je n'ai aucune erreur de détecter. Pouvez me dire comment faire pour me débarrasser de cette phrase, surtout si aucune erreur ne lui correspond? Je vous montre mon code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Text.RegularExpressions;
using System.Collections;
using System.IO;
namespace Test7
{
class Class1
{
// Fonction qui calcule la distance entre le récepteur et les points d'accès Wifi
public static double CalculDistance(double P)
{
double h;
double k;
double l;
double m;
k = Math.Pow(10, (P / 10) - 3);
l = 1.25 / (4 * Math.PI);
m = 0.1 * 11 * 11;
h = l/(Math.Sqrt(k/m));
return h;
}
/* Fonction qui calcule les coordonnées du récepteur
public static List<double> CalculPosition(double a, double b, double c, double d, double f, double g, double l, double m, double n, double o, double p, double q)
{
List<double> C = new List<double>();
double x, y, z;
// Création d'une instance de document xml et chargement des données.
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\Documents and Settings\8907840K\Mes documents\Visual Studio 2010\Projects\Tets7\Tets7\bin\Debug\Summary.kml");
// 1. Sélectionne tous les noeuds descriptions en utilisant un chemin.
TimeSpan h2 = h1.Subtract(ts);
double e = h2.TotalMilliseconds;
// Ecriture dans fichier texte
monStreamWriter.WriteLine(string.Format("{0},{1},{2},{3}", nom, puissance1, coordonnées, e));
if (i < 3)
{
if (i == 1)
{
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201548 23 mai 2012 à 15:10
Bonjour,
Ce message correspond à une NullReferenceException : Tu accèdes à un membre d'un objet qui est null.
Pour savoir de quel objet il s'agit et à quelle ligne, il faut enlever le
catch (Exception ex)
{
}
Ensuite, sache qu'un try / catch sur l'intégralité d'une méthode, c'est mal. C'est le meilleur moyen d'avoir une méthode qui ne marche pas sans que tu le voies ou un comportement anormal.
Les try / catch sont là pour gérer les exceptions, et doivent être utilisés de manière exceptionnelle.
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
haddreezy
Messages postés40Date d'inscriptionlundi 14 mai 2012StatutMembreDernière intervention 8 août 20124 23 mai 2012 à 16:21
Mon problème vient de cette ligne: "node = root.ChildNodes[1].ChildNodes[1].ChildNodes[1]; " l'élément node est défini juste au dessus par "XmlNode node;" . Dois je l'initialiser pour éviter qu'il soit null? Comment faire dans ce cas? Ou celà vient d'autre chose que de l'initilaisation?
cs_L0ci
Messages postés224Date d'inscriptionvendredi 26 novembre 2010StatutMembreDernière intervention11 juin 20137 23 mai 2012 à 12:31
Bonjour,
alors je n'ai pas lu tout le code mais, cette erreur signifie que le code essaie d'utiliser un objet/variable/... qui n'ai pas été instancié.
Le mieux serait de faire un pas à pas sur l’exécution pour connaitre la ligne qui génère l'erreur.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201548 23 mai 2012 à 16:50
Comme je le disais, c'est que tu essaies d'accéder à un membre d'un élément qui est null. Autrement dit que ce que tu as avant un "." est null.
Si le problème est à la ligne "node = root.ChildNodes[1].ChildNodes[1].ChildNodes[1];", voici ce qui peut être null :
- root
- ChildNodes[1] (orange)
- ChildNodes[1] (violet)
En mode debug, tu peux sélectionner root, root.ChildNodes[1] ou root.ChildNodes[1].ChildNodes[1], plus faire clic-droit → Add Watch (ajouter un observateur ou quelque chose comme ça en français).
Tu verras ainsi la valeur de ton élément (donc tu verras s'il est null).
Mais plus simplement : est-ce normal que tu ailles à l'indice 1 (alors que le premier indice est 0) ? Est-ce que ça ne devrait pas plutôt être root.ChildNodes[0].ChildNodes[0].ChildNodes[0]; ?
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
haddreezy
Messages postés40Date d'inscriptionlundi 14 mai 2012StatutMembreDernière intervention 8 août 20124 23 mai 2012 à 16:58
C'est bon j'ai réussi à résoudre mon problème. Je pensais en effet que ChildNodes[1] me renverrait au premier enfant du 1er noeud de mon texte, or il renvoie au premier noeud tout court. Du coup c'est ChildNodes[1] qui était nul.
J'ai donc remplacé mon expression par :
haddreezy
Messages postés40Date d'inscriptionlundi 14 mai 2012StatutMembreDernière intervention 8 août 20124 23 mai 2012 à 14:49
Mon problème vient de l'instruction: "catch (Exception ex)", donc de l'objet ex mais je ne sais pas du tout comment résoudre l'erreur, je débute en c#. Quelqu'un pourrait me venir en aide?