我正在使用LINQ to XML查询来遍历XML文件并收集余额为正的那些节点。 XML可能有一个空的余额节点,或者包含无法转换为十进制的内容,因此我准备进行检查以跳过此类值。其中一项检查使用decimal.TryParse()
来查看余额节点的内容是否可以转换为十进制。如果可以转换,我有一个执行转换的后续Where子句。
XML结构:
<Invoice>
...
<balance>Could be any string here or empty</balance>
...
</Invoice>
码:
decimal convertedDecimalButUnused;
var resultsWithPositiveBalance = xml.Descendants("Invoice")
.Where(x => !x.Element("balance").IsEmpty);
.Where(x => Decimal.TryParse(x.Element("balance").Value, out convertedDecimalButUnused))
.Where(x => Convert.ToDecimal(x.Element("balance").Value) > 0);
我的问题是,是否可以利用
out
的decimal.TryParse()
参数而不是第二次执行十进制转换? 最佳答案
只需按照TryParse进行比较即可。您可以利用C#7功能,允许您在线声明值。
例如:
var resultsWithPositiveBalance = xml.Descendants("Invoice")
.Where(x => !x.Element("balance").IsEmpty);
.Where(x => Decimal.TryParse(x.Element("balance").Value, out var val) && val > 0)
由于TryParse将为您处理该元素是否为空,因此您也可以放弃对其进行检查。最后,您可以使用以下方法获得所需的结果:
var resultsWithPositiveBalance = xml.Descendants("Invoice")
.Where(x => decimal.TryParse(x.Element("balance").Value, out var val) && val > 0);