2009-09-16 6 views
1
var doc = XDocument.Parse(inputXML); 

ce bombardement lorsque le noeud "quantité" n'est pas présent. Comment puis-je vérifier l'existence avant d'évaluer?LinqToXML, rupture lorsque le noeud n'existe pas. Comment puis-je vérifier l'existence?

decimal amt; 
var amount = doc.Descendants("amount").SingleOrDefault().Value; 
bool amountValid = decimal.TryParse(amount, out amt); 

Je dois m'assurer que "quantité" est disponible avant l'évaluation.

Quelqu'un peut-il aider?

Merci Tous, ~ ck à San Diego

Répondre

1

Essayez ceci:

var amountElement = doc.Descendants("amount").SingleOrDefault(); 

if (amountElement != null) 
{ 
    decimal amt; 
    bool amountValid = decimal.TryParse(amountElement.Value, out amt); 

    // other code 
} 
+0

cela a bien fonctionné. Merci! – Hcabnettek

2

XElement fournit explicit casts pour la plupart des types de valeur, y compris Nullable<Decimal>:

var amt = (decimal?)doc.Descendants("amount").SingleOrDefault(); 

De là, vous pouvez vérifier si amt est null ou utilise sa propriété HasValue.

Mise à jour: Il est intéressant de souligner que le casting sera lancer une FormatException si la valeur est pas un Decimal. Si vous voulez continuer à utiliser TryParse, vous pouvez garder le simple code avec un casting string:

decimal amt; 
var amount = (string)doc.Descendants("amount").SingleOrDefault(); 
bool amountValid = decimal.TryParse(amount, out amt); 

En interne, la distribution de chaîne est mis en œuvre comme l'échantillon de Ben, le retour soit null ou element.Value.

+0

+1: Je ne le savais pas - bon conseil! Je suis constamment impressionné par la qualité de XLinq. –

Questions connexes