Null vérifier sur XElement
Mon projet actuel (C# 3.5) a beaucoup de code qui ressemble à ceci (elem est une instance de XElement):
textbox1.Text = elem.Element("TagName") == null ? "" : elem.Element("TagName").Value;
Est-il possible d'écrire la même chose sans répéter un appel elem.Element() et sans l'utilisation de méthodes d'extension?
Peut-être à l'aide de lambda? (Mais je ne peux pas comprendre comment.)
Pourquoi voulez-vous éviter les Méthodes d'Extension si c'est exactement un cas d'utilisation? Alternative (la Java) serait de définir une méthode statique quelque part, et de l'utiliser:
Jackwerth je veux juste savoir si il y a d'autres façons:)
ElementHelper.ValueOrDefault(elem, "TagName", "")
.Jackwerth je veux juste savoir si il y a d'autres façons:)
OriginalL'auteur lazymf | 2011-05-23
Vous devez vous connecter pour publier un commentaire.
XElement a une conversion explicite à la Chaîne (et un tas d'autres types de) qui fait appel .De la valeur.
Dans otherwords vous pouvez écrire ceci:
je pense que cela va retourner la valeur null si l'élément est null ainsi
-edit-
vérifié,
voici un exemple:
n
sera nulle.(String)elem.Element("TagName") ?? "";
.Merci! Je pense que je vais rester avec cette solution.
Great stuff, sauve-moi de faire un nul vérifier à chaque fois!
OriginalL'auteur aL3891
Oui. vous pouvez l'écrire comme ceci:
C'est le null coalescence opérateur.
Cela signifie que si la gauche n'est pas null, alors utilisez le côté gauche. Si elle est nulle, puis utilisez le côté droit.
J'ai relu maintenant. Ne vois toujours pas ce que vous en plaindre ici. Pouvez-vous me donner plus d'information concernant ce que vous entendez est le problème ici?
Øyvind: La partie après le
:
a une.Value
. Je suis tombé dans le même piège.Ne voir qu'une seule. Fixe ma réponse maintenant. Vérifié sur mon propre système.
OriginalL'auteur Øyvind Bråthen
Il y a un grand article sur CodeProject pour de telles actions:
http://www.codeproject.com/KB/cs/maybemonads.aspx
D'autres exemples sont disponibles sur le CodeProject.
J'ai modifié (meilleure?) cette réponse en supprimant la contrainte de classe sur la TResult type et le retour par défaut(TResult) au lieu de null.
OriginalL'auteur VMAtm
Un fou
??
approche:Aurait préféré une méthode d'extension.
OriginalL'auteur Marcel Jackwerth