web-dev-qa-db-fra.com

Comment vérifier que l'objet est nul ou vide dans C # .NET 3.5?

Si les objets contiennent null ou empty alors comment valider ou vérifier la condition pour la même chose?

Comment faire pour vérifier si l'objet obj est null ou Empty

J'ai le code comme suit:

class Program
{
    static void Main(string[] args)
    {
        object obj = null;

        double d = Convert.ToDouble(string.IsNullOrEmpty(obj.ToString()) ? 0.0 : obj);
        Console.WriteLine(d.ToString());
    }
}

Avec ce code, je reçois NullReference Exception en tant que Object reference not set to an instance of an object.

Pls aide.

Ici je ne reçois pas ....

Comment valider si cet objet est null ou Empty sans se convertir en .ToString () ??

Existe-t-il une approche pour vérifier la même chose ??

8
venkat

Le problème que vous rencontrez est que votre objet est de type, eh bien, objet. Afin de l'évaluer avec string.IsNullOrEmpty, vous devez transmettre votre objet avec le transfert vers (string)

ainsi:

static void Main(string[] args)
{
    object obj = null;

    double d = Convert.ToDouble(string.IsNullOrEmpty((string)obj) ? 0.0 : obj);
    Console.WriteLine(d.ToString());
}

Cela fonctionnera correctement puisque vous n'appelez pas explicitement .ToString sur votre objet (inexistant).

13
Stefan H

Vous obtenez la référence null car vous exécutez obj.ToString() qui renverra la valeur de retour de la méthode ToString () de obj. Le problème est que dans la ligne précédente, vous définissez obj sur null afin d'obtenir une référence d'objet non ... erreur

Pour que votre code fonctionne, vous devez faire: 

//This will check if it's a null and then it will return 0.0 otherwise it will return your obj.
double d = Convert.ToDouble(obj ?? 0.0); 

Votre code tel qu'il est maintenant sera toujours 0.0

Sans coalescence nulle: (??)

double d = Convert.ToDouble(obj ? 0.0 : obj);    

EDIT

Si je comprends bien les commentaires, vous voulez savoir si l'objet est null ou une chaîne vide. Vous pouvez le faire en le convertissant d'abord en chaîne au lieu d'appeler la méthode ToString qui fait quelque chose de complètement différent:

string objString = (obj as string);
double d = Convert.ToDouble(string.IsNullOrEmpty(objString) ? "0.0" : objString);      
3
TBohnen.jnr
class Program
{
    static void Main(string[] args)
    {
        object obj = DBNull.Value;
        if(obj != DBNull.Value) {
            double d = Convert.ToDouble(obj);
            Console.WriteLine(d.ToString());
        }
    }
}
2
user3245067

Vous pouvez utiliser l'opérateur ??. Il est connu sous le nom d'opérateur null-coalescing .

1
Mohit

Cela ressemble à ce que vous voulez faire est la suivante:

object obj = null;
double d;

if (!double.TryParse(Convert.ToString(obj), out d))
{
   d = 0.0;
}

Mais la question n'a pas beaucoup de sens.

1
Dmitry S.

Suivre le code pourrait être un moyen plus sûr d’y parvenir.

if(obj != null && !string.IsNullOrEmpty(obj.ToString()))
{

}

Ce code nous évite qu'un objet ne soit pas un type de chaîne.

Vous ne devriez pas être un peu surpris que vous obteniez une NullReferenceException avec ce code. La partie incriminée est

obj.ToString()

Si vous avez écrit

object obj = null;
string s = obj.ToString();

vous vous attendriez à une NullReferenceException. Comme l'appel à ToString a lieu avant l'appel à string.IsNullOrEmpty, l'exception est levée avant la vérification de la présence d'une chaîne nulle ou vide.

0
Adam Mihalcin