J'extrais varchar
des valeurs d'une base de données et souhaite définir le string
auquel je les attribue comme "" s'il s'agit de null
. Je le fais actuellement comme ça:
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 faire cela en une seule ligne comme ceci:
this.approved_by = "" || planRec.approved_by.toString();
Cependant, je ne trouve pas de manière optimale de le faire. Y a-t-il un meilleur moyen ou est-ce ce que j'ai le meilleur moyen de le faire?
Essaye ça:
this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();
Vous pouvez également utiliser l'opérateur null-coalescing comme d'autres l'ont déjà dit - puisque personne n'a donné d'exemple qui fonctionne avec votre code, en voici un:
this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();
Mais cet exemple ne fonctionne que depuis une valeur possible pour this.approved_by
est identique à 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.
L'opérateur coalesce (??) est ce que vous voulez, je crois.
Je pense que le mieux que vous puissiez trouver est
this.approved_by = IsNullOrEmpty(planRec.approved_by) ? string.Empty
: planRec.approved_by.ToString();
Bien sûr, étant donné que vous faites allusion au fait que approved_by
est un object
(qui ne peut être égal à ""), cela serait réécrit comme
this.approved_by = (planRec.approved_by ?? string.Empty).ToString();
Vous recherchez l'opérateur de coalesce C #: ??. Cet opérateur prend un argument gauche et droit. Si le côté gauche de l'opérateur est null ou nullable sans valeur, il retournera le bon argument. Sinon, il retournera la gauche.
var x = somePossiblyNullValue ?? valueIfNull;
Avec C # 6, le cas où planRec.approved_by n'est pas une chaîne est un peu plus court:
this.approved_by = planRec.approved_by?.ToString() ?? "";
Utilisez l'opérateur de fusion C #: ??
// if Value is not null, newValue = Value else if Value is null newValue is YournullValue
var newValue = Value ?? YourNullReplacement;
Pour étendre @ la réponse de Dave ... si planRec.approved_by est déjà une chaîne
this.approved_by = planRec.approved_by ?? "";
Pour affecter une variable non vide sans répéter le nom de la variable actuelle (et sans rien affecter si la variable est null!), Vous pouvez utiliser une petite méthode d'assistance avec un paramètre Action
:
public static void CallIfNonEmpty(string value, Action<string> action)
{
if (!string.IsNullOrEmpty(value))
action(value);
}
Et puis juste l'utiliser:
CallIfNonEmpty(this.approved_by, (s) => planRec.approved_by = s);
Vous pouvez également le faire dans votre requête, par exemple dans le serveur SQL, les fonctions intégrées de Google ISNULL
et CASE
.