Quelque chose que je fais de plus en plus est de vérifier une chaîne pour vide (comme in ""
ou null) et un opérateur conditionnel.
Un exemple actuel:
s.SiteNumber.IsNullOrEmpty() ? "No Number" : s.SiteNumber;
Ceci est juste une méthode d'extension, c'est équivalent à:
string.IsNullOrEmpty(s.SiteNumber) ? "No Number" : s.SiteNumber;
Comme il est vide et non nul, ??
cela ne fera pas l'affaire. Une string.IsNullOrEmpty()
version de ??
serait la solution parfaite. Je pense qu'il doit y avoir un moyen plus propre de faire cela (j'espère!), Mais j'ai été incapable de le trouver.
Quelqu'un connaît-il une meilleure façon de faire cela, même si ce n'est que dans .Net 4.0?
c#
string
coalesce
null-coalescing-operator
Nick Craver
la source
la source
let (|?) x y = if String.IsNullOrEmpty(x) then y else x
et utilisez-le commes.SiteNumber |? "No Number"
.Réponses:
Il n'y a pas de moyen intégré de le faire. Vous pouvez cependant faire en sorte que votre méthode d'extension renvoie une chaîne ou une valeur nulle, ce qui permettrait à l'opérateur de fusion de fonctionner. Ce serait étrange, cependant, et je préfère personnellement votre approche actuelle.
Puisque vous utilisez déjà une méthode d'extension, pourquoi ne pas en créer une qui renvoie la valeur ou une valeur par défaut:
la source
???
opérateur en C # 5, qui sait.item ?? x=> x.ToString() : null;
C # nous permet déjà de remplacer des valeurs par
null
avec??
. Donc, tout ce dont nous avons besoin est une extension qui convertit une chaîne vide ennull
, puis nous l'utilisons comme ceci:Classe d'extension:
la source
Je sais que c'est une vieille question - mais je cherchais une réponse et aucune des réponses ci-dessus ne correspondait à mes besoins ainsi qu'à ce que j'ai fini par utiliser:
Usage:
EDIT: Une manière encore plus compacte d'écrire cette fonction serait:
la source
using System.Linq
J'ai quelques extensions utilitaires que j'aime utiliser:
Edit: Inspiré par la réponse de sfsr , je vais désormais ajouter cette variante à ma boîte à outils:
la source
@
préfixe du@default
paramètre? Je n'ai jamais vu ça auparavant.default
comme nom de variable même s'il s'agit d'un mot clé réservé en C #.Une méthode d'extension légèrement plus rapide que celle proposée précédemment peut-être:
la source
code
chaîne statique publique Coalesce (cette chaîne @this, string @default = "") {return (@this == null || String.IsNullOrWhiteSpace (@this))? @ par défaut: @this; }L'un des avantages de l'opérateur à fusion nulle est qu'il court-circuite. Lorsque la première partie n'est pas nulle, la deuxième partie n'est pas évaluée. Cela peut être utile lorsque la solution de secours nécessite une opération coûteuse.
J'ai fini avec:
Usage:
la source
J'utilise simplement une méthode d'extension NullIfEmpty qui retournera toujours null si la chaîne est vide permettant ?? (Null Coalescing Operator) à utiliser normalement.
Cela permet alors ?? à utiliser normalement et facilite la lecture du chaînage.
la source
que diriez-vous d'une méthode d'extension de chaîne ValueOrDefault ()
ou retourne null si la chaîne est vide:
Je n'ai pas essayé ces solutions cependant.
la source
...OrDefault()
serait déroutant s'il ne se comportait pas comme le reste des...OrDefault()
méthodes du framework . Qu'on le veuille ou non, MS a donné une signification spécifique à cette dénomination et s'écarter de ce comportement dans les méthodes personnalisées est inutilement déroutant pour les utilisateurs de votre API.J'utilise ma propre méthode d'extension de chaîne Coalesce. Puisque ceux-ci utilisent LINQ et gaspillent absolument des ressources pour des opérations gourmandes en temps (je l'utilise en boucles serrées), je vais partager le mien:
Je pense que c'est assez simple et que vous n'avez même pas besoin de vous soucier des valeurs de chaîne nulles. Utilisez-le comme ceci:
Je l'utilise beaucoup. Une de ces fonctions "utilitaires" dont vous ne pouvez pas vous passer après l'avoir utilisée pour la première fois :-)
la source
s2.Coalesce(s3)
est exécuté même lorsque cela n'est pas nécessaire. Mieux vaut utiliser uneNullIfEmpty()
extension et??
.J'aime la brièveté de la méthode d'extension suivante
QQQ
pour cela, bien que bien sûr un opérateur comme? serait mieux. Mais nous pouvons augmenter cela en permettant non seulement de comparer deux mais trois valeurs d'options de chaîne, ce que l'on rencontre le besoin de gérer de temps en temps (voir la deuxième fonction ci-dessous).la source
Or
, et j'utiliserais leparams
mot - clé, comme les autres réponses, ce qui évite les définitions en double pour plusieurs paramètres.params
, il serait préférable de ne pas faire cela pour le scénario par défaut ou deux, car celaparams
provoque l'allocation d'un tableau inutilement lorsque vous n'avez qu'une ou deux entrées par défaut. Après cela, cela a du sens.