C# LinqToXML,在节点不运行时中断';不存在。我如何检查是否存在?

C# LinqToXML,在节点不运行时中断';不存在。我如何检查是否存在?,c#,linq-to-xml,C#,Linq To Xml,当“amount”节点不存在时,此按钮将爆炸。在评估之前,我如何检查是否存在 var doc = XDocument.Parse(inputXML); 在评估之前,我需要确保“金额”可用 有人能帮忙吗 谢谢大家, ~ck在圣地亚哥试试这个: decimal amt; var amount = doc.Descendants("amount").SingleOrDefault().Value; bool amountValid = decimal.TryParse(amount, out

当“amount”节点不存在时,此按钮将爆炸。在评估之前,我如何检查是否存在

var doc = XDocument.Parse(inputXML);
在评估之前,我需要确保“金额”可用

有人能帮忙吗

谢谢大家, ~ck在圣地亚哥

试试这个:

 decimal amt;
 var amount = doc.Descendants("amount").SingleOrDefault().Value;
 bool amountValid = decimal.TryParse(amount, out amt);
XElement提供了大多数值类型,包括
可为空的

从那里,您可以检查
amt
是否为
null
或使用其
HasValue
属性

更新:值得指出的是,如果值不是
十进制
,则强制转换将抛出
FormatException
。如果仍要使用
TryParse
,可以使用
字符串
强制转换使代码保持简单:

var amt = (decimal?)doc.Descendants("amount").SingleOrDefault();
在内部,字符串强制转换的实现与Ben的示例类似,返回
null
元素。Value

+1:我不知道这一点——很棒的提示!XLinq经过深思熟虑,给我留下了深刻的印象。
var amt = (decimal?)doc.Descendants("amount").SingleOrDefault();
decimal amt;
var amount = (string)doc.Descendants("amount").SingleOrDefault();
bool amountValid = decimal.TryParse(amount, out amt);