138 votes

Moyen le plus court de vérifier la valeur NULL et d'attribuer une autre valeur si ce n'est pas le cas

Je retire les valeurs varchar d'une base de données et je veux définir les valeurs string que je leur assigne comme "" si elles sont null. Je le fais actuellement comme ceci :

if (string.IsNullOrEmpty(planRec.approved_by) == true)
  this.approved_by = "";
else
  this.approved_by = planRec.approved_by.toString();

Il semble qu'il devrait y avoir un moyen de le faire en une seule ligne quelque chose comme :

this.approved_by = "" || planRec.approved_by.toString();

Cependant, je ne trouve pas un moyen optimal de le faire. Y a-t-il un meilleur moyen ou est-ce que j'ai le meilleur moyen de le faire ?

146voto

Andrew Hare Points 159332

Essayez ceci :

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();

Vous pouvez également utiliser l'opérateur de coalescence nulle comme d'autres l'ont dit - puisque personne n'a donné d'exemple qui fonctionne avec votre code ici en est un :

this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();

Mais cet exemple ne fonctionne que car une valeur possible pour this.approved_by est la même que l'une des valeurs potentielles que vous souhaitez définir. Pour tous les autres cas, vous devrez utiliser l'opérateur conditionnel comme je l'ai montré dans mon premier exemple.

81voto

nzrytmn Points 531

En commençant par C# 8.0, vous pouvez utiliser l'opérateur ? ?= pour remplacer le code du formulaire

if (variable is null)
{
    variable = expression;
}

avec le code suivant :

variable ??= expression;

Plus d'informations ici

61voto

JaredPar Points 333733

Vous recherchez l'opérateur C# coalesce : ? ?. Cet opérateur prend un argument de gauche et de droite. Si le côté gauche de l'opérateur est NULL ou un NULLABLE sans valeur, il renverra l'argument de droite. Sinon, il renverra la gauche.

var x = somePossiblyNullValue ?? valueIfNull;

41voto

Dave Ward Points 36006

L'opérateur de coalescence (? ?) est ce que vous voulez, je crois.

30voto

Dmitri Nesteruk Points 7669

Je pense que le meilleur que vous puissiez trouver est

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? string.Empty
                                                      : planRec.approved_by.ToString();

Bien sûr, puisque vous faites allusion au fait que approved_by est un object (qui ne peut pas être égal à ""), cela serait réécrit comme

this.approved_by = (planRec.approved_by ?? string.Empty).ToString();

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