LinqToXML,当Node不存在时中断。我如何检查存在?

时间:2009-09-16 22:52:57

标签: c# linq-to-xml

var doc = XDocument.Parse(inputXML);

当“amount”节点不存在时,这会爆炸。如何在评估之前检查是否存在?

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

在评估之前,我需要确保“金额”可用。

有人可以帮忙吗?

全部谢谢, 〜在圣地亚哥

2 个答案:

答案 0 :(得分:2)

XElement为大多数值类型提供explicit casts,包括Nullable<Decimal>

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

从那里,您可以检查amtnull还是使用HasValue属性。

更新:值得注意的是,如果值不是FormatException,则广告会投放Decimal。如果您仍想使用TryParse,则可以使用string强制转换来保持代码简单:

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

在内部,字符串强制转换与Ben的示例类似,返回nullelement.Value

答案 1 :(得分:1)

试试这个:

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

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

    // other code
}