78 votes

Recherche de null avant ToString ()

Voici le scénario ...

 if (entry.Properties["something"].Value != null)
  attribs.something = entry.Properties["something"].Value.ToString();
 

Bien que efficace et fonctionnant correctement, cela me semble moche. Si je ne vérifie pas la valeur NULL avant d'exécuter ToString (), une exception est levée si la propriété était null. Existe-t-il une meilleure façon de gérer ce scénario?

Très appréciée!

130voto

Rex M Points 80372

(édité pour fonctionner réellement :))

 object defaultValue = "default";
attribs.something = (entry.Properties["something"].Value ?? defaultValue).ToString()
 

Edit: J'ai aussi commencé à utiliser ceci, ce qui n'est pas terriblement intelligent, mais pratique:

 public static string ToSafeString(this object obj)
{
    return (obj ?? string.Empty).ToString();
}
 

42voto

Dale Ragan Points 14495

Si vous ciblez le .NET Framework 3.5, la solution la plus élégante serait une méthode d'extension à mon avis.

 public static class ObjectExtensions
{
    public static string NullSafeToString(this object obj)
    {
        return obj != null ? obj.ToString() : String.Empty;
    }
}
 

Puis utiliser:

 attribs.something = entry.Properties["something"].Value.NullSafeToString();
 

39voto

Vahid Points 291
Convert.ToString(entry.Properties["something"].Value);

1voto

ZaijiaN Points 1586

En variante à la réponse de RexM:

 attribs.something = (entry.Properties["something"].Value ?? attribs.something).ToString()
 

Le seul inconvénient serait que quelque chose soit attribué à quelque chose d'attribut (lui-même, dans cet exemple) même si entry.Properties ["quelque chose"]. La valeur était nulle - ce qui pourrait coûter cher si la propriété .something effectuait un autre traitement et / ou cette ligne s'exécute beaucoup (comme dans une boucle).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X