C# LinqToXML,在节点不运行时中断';不存在。我如何检查是否存在?
当“amount”节点不存在时,此按钮将爆炸。在评估之前,我如何检查是否存在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
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);