LinqToXML,当Node不存在时中断。我如何检查存在?
-
07-07-2019 - |
题
var doc = XDocument.Parse(inputXML);
当<!>引用<!>;数量<!>节点不存在。如何在评估之前检查是否存在?
decimal amt;
var amount = doc.Descendants("amount").SingleOrDefault().Value;
bool amountValid = decimal.TryParse(amount, out amt);
我需要确保<!> quot; amount <!> quot;在评估之前可用。
有人可以帮忙吗?
全部谢谢, 〜在圣地亚哥
解决方案
试试这个:
var amountElement = doc.Descendants("amount").SingleOrDefault();
if (amountElement != null)
{
decimal amt;
bool amountValid = decimal.TryParse(amountElement.Value, out amt);
// other code
}
其他提示
XElement提供显式演员对于大多数值类型,包括Nullable<Decimal>
:
var amt = (decimal?)doc.Descendants("amount").SingleOrDefault();
从那里,您可以检查amt
是null
还是使用HasValue
属性。
更新:值得指出的是,如果值不是FormatException
,则演员会抛出Decimal
。如果您仍想使用TryParse
,则可以使用string
强制转换:
decimal amt;
var amount = (string)doc.Descendants("amount").SingleOrDefault();
bool amountValid = decimal.TryParse(amount, out amt);
在内部,字符串强制转换是像Ben的样本一样实现的,返回element.Value
或<=>。
不隶属于 StackOverflow