8
votes

Comment vérifier l'objet est NULL ou vide en C # .NET 3.5?

Si des objets contiennent NULL ou vide, puis comment valider ou vérifier la condition pour la même chose?

Comment bool Vérifiez si l'objet obj est null ou Vide

J'ai le code comme suit: xxx

avec ce code, je reçois nullréference exception AS Référence d'objet non définie sur une instance d'un objet.

pls aide.

Ici, je ne comprends pas ....

Comment valider si cet objet est null ou vide sans convertir en .tostring () ??

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


10 commentaires

Vous ne pouvez pas convertir un objet nul en chaîne, donc l'erreur. Quel est le problème avec juste vérifier si (obj! = Null)?


Pourquoi voudriez-vous appeler tostring () sur un objet que vous connaissez est null , et génère donc nullreferenceException ?


Il n'existe pas d'objet vide (bien que la chaîne vide est une chose une chose comme la chaîne vide).


Je pense que cela pourrait simplement être un exemple de code pour montrer le problème ...


En ce qui concerne votre édition, que pensez-vous qu'un objet vide représente?


@phoog le vide dans isnullorempty, fait référence à une chaîne qui n'a aucun caractère dedans. Il a une longueur de 0.


(Désolé, je ne peux pas modifier les commentaires sur mon téléphone pour une raison quelconque) ou une meilleure question: pourquoi voulez-vous vérifier si l'objet est null ou vide?


@Stefanh je sais que, mais il parle d'un objet, pas une chaîne.


@phoog qui serait parce qu'une chaîne nulle ou vide ne peut pas être gérée par convert.todouble.


Comment vérifier si l'objet est vide ??


7 Réponses :


3
votes

Vous obtenez la référence NULL parce que vous exécutez obj.tostring () code> qui retournera la valeur de la méthode de ToString () de l'obj. Le problème est que dans la ligne précédente, vous avez défini obj vers NULL afin d'obtenir une référence d'objet non ... Erreur

Pour faire fonctionner votre code, vous devez faire: P>

string objString = (obj as string);
double d = Convert.ToDouble(string.IsNullOrEmpty(objString) ? "0.0" : objString);      


9 commentaires

OK .... Comment valider si cet objet est null ou vide sans convertir en .tostring () ??


Comme vous l'avez fait, sauf que vous n'appelez pas la méthode de Tostring


@ Tbohnen.jnr il n'y a pas de moulage à la chaîne; L'appel de la totring n'est pas un casting.


Oui, c'est génial, tout comme c # :-)


Mais cette approche ne manipule pas les chaînes vides


Très première fois, j'entends parler de NULL-COALESSCING OPLOCICE et rend excitant d'en savoir plus sur la nouvelle chose à propos de cet opérateur. Pouvez-vous donner des détails sur l'importance et les avantages de cet opérateur dans les situations où je peux être utilisé de la même manière avec des exemples simples et bons.


Si l'objet obj est vide alors comment valider?


@ Tbohnen.jnr: Je n'ai toujours pas trouvé votre commentaire ou commentaires mises à jour et je ne me gère toujours pas si l'objet est vide ?


Après la modification audacieuse dans ma réponse? Voulez-vous vérifier une chaîne vide?



0
votes

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

si vous avez écrit xxx

vous attendez un nullreferenceException . Étant donné que l'appel à tostring se produit avant l'appel sur string.isnullorempty , l'exception est lancée avant de vérifier une chaîne null ou vide.


0 commentaires

1
votes

Vous pouvez utiliser l'opérateur . Il est connu sous le nom de Opérateur NULL-COALESSE .


2 commentaires

Très première fois, j'entends parler de NULL-COALESSCING OPLOCICE et rend excitant d'en savoir plus sur la nouvelle chose à propos de cet opérateur. Pouvez-vous donner des détails sur l'importance et les avantages de cet opérateur dans les situations où je peux être utilisé de la même manière avec des exemples simples et bons.


Si l'objet est vide alors comment valider?



1
votes

Cela ressemble à ce que vous voulez faire est ceci:

object obj = null;
double d;

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


0 commentaires

13
votes

Le problème que vous rencontrez est que votre objet est de type, de puits, d'objet. Afin de l'évaluer avec String.Isnullorempty, vous devez transmettre votre objet avec la distribution à (string)

comme: xxx

Cela fonctionnera bien depuis que vous n'appellent pas explicitement .tostrer sur votre objet (inexistant).


3 commentaires

En supposant que obj est généré par un processus plus complexe que celui de la définition simplement sur null , la distribution échouerait dans le cas où ce processus produit un véritable objet qui n'est pas un chaîne de caractères.


CORRECT, cela suppose que l'objet dans ce cas soit nul ou quelque chose qui peut être converti en une chaîne.


Techniquement, cela suppose que l'objet puisse être jeté à la chaîne, pas seulement converti. Cela a échoué pour moi quand Obj était en fait un int, avec int.Tostring () travaillant, mais (string) Int défaillance. C'est dommage; J'essayais d'éviter le ToString supplémentaire ().



2
votes
class Program
{
    static void Main(string[] args)
    {
        object obj = DBNull.Value;
        if(obj != DBNull.Value) {
            double d = Convert.ToDouble(obj);
            Console.WriteLine(d.ToString());
        }
    }
}

0 commentaires

0
votes

Le code suivant pourrait être un moyen plus sûr de l'atteindre.

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

}


3 commentaires

D'où vient le bien .value ?


Mon mauvais..bledated it..cheers mate!


BTW, l'OP a demandé sans convertir en .tostring () .