Tester si une référence est nulle [Résolu]

Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 14 déc. 2011 à 19:28 - Dernière réponse :
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 16 déc. 2011 à 23:22
Bonsoir.

J'ai une classe toute bête avec quelques propriétés.
J'ai eu besoin d'écrire les opérateurs == et != (comme je ne sais pas quoi faire de Equals() et GetHasCode() j'ai mis return base....).
A un moment dans mon application je teste si une référence est instanciée comme ça:
if(maRef != null) ....

et là c'est le drame, dans ma méthode "==" le premier test
if (moi.Propriete1 == autre.Propriete1) 

me retourne une erreur NullExeption, logique "autre" est null, et bien souvent, à ce stade, "moi" aussi.

J'ai contourné le problème comme ça, mais ça ne me plait pas:

bool moiNull = False;
bool autreNull = False;

try//test si moi est null
{
   string toto = moi.Propriete1;
}
catch(NullExeption e)
{
   moiNull = True;
}

try// test si autre est null
{
   string toto = autre.Propriete1;
}
catch(NullExeption e)
{
   autreNull = True;
}

if (moiNull && autreNull) {...}
else if (moiNull II autreNull) {...}//j'ai pas trouvé la barre du ou sur mon mac...



Y'a-t-il un moyen de faire autrement?

Merci

Whismeril
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
- 16 déc. 2011 à 08:07
3
Merci
Bonjour

Tu peux tester la reference null sur les objects en les "castant" en object

// si un des deux est null
    if (((object)moi null) || ((object)autre null))
    {
        ...
    }

lors d'une surcharge de '==' en général on test aussi si les 2 instances sont identiques
// si les deux sont indentiques, ou nulls
    if (System.Object.ReferenceEquals(moi, autre))
    {
      ...
    }


Bob.
C# is amazing, enjoy it!

Merci cs_Robert33 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_Robert33
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 16 déc. 2011 à 17:12
0
Merci
Merci, je vais tester ça.

Whismeril
Commenter la réponse de Whismeril
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 16 déc. 2011 à 23:22
0
Merci
C'est impeccable, je n'avais pas du tout penser au cast en object.

Je ne connaissais pas System.Object.ReferenceEquals(), dans mon cas il retournera forcément false car je compare deux désérialisations xml de deux fichiers différents. Mais je le garde dans un coin pour le jour ou.

Merci

Whismeril
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.