CheckingXMLforNullElementstoLINQ我面临这样一种情况,我正在使用Linq将XML文档解析为对象。在解析期间,我正在检查以确保元素在继续解析它们的值之前不为空。无论如何要简化这个声明?varvariable=(fromxinxdoc.Descendants("Root")selectnewAccountingResponse{NetCharge=x.Element("Charges")!=null&&x.Element("Charges").Element("NetCharge")!=null?x.Element("Charges").Element("NetCharge").Value:"0",TotalCharge=x.Element("Charges")!=null&&x.Element("Charges").Element("TotalCharge")!=null?x.Element("Charges").Element("TotalCharge").Value:"0"}).SingleOrDefault();总而言之,我不想一直检查每一行上是否存在一个节点。我知道我可以在解析之前测试节点是否存在,但可能还有其他数据需要解析才能创建AccountingResponse,我想避免if语句一次只解析部分XML.或者也许我做的完全错了,还有更好的方法!一个简单的替代方法是使用Elements而不是Element-如果元素不存在,将返回零长度序列。所以你可以使用:fromxinxdoc.Descendants("Root")selectnewAccountingResponse{NetCharge=x.Elements("Charges").Elements("NetCharge").Select(y=>(int)y).??FirstOrDefault(),TotalCharge=x.Elements("Charges").Elements("TotalCharge").Select(y=>(int)y).??FirstOrDefault(),}).SingleOrDefault();(请注意,您的原始代码无法编译,因为Value是一个字符串,而0是一个整数...)您可以替换x.Element("nodeName")!=null:int.Parse(x.Element("nodeName").Value):0与(int)x.Element("nodeName")相同它适用于字符串、int、double、decimal、bool、uint、DateTime和Nullable。在C#6.0中,您可以使用monadicNull条件运算符?。在您的示例中应用它之后,它将如下所示:varvariable=(fromxinxdoc.Descendants("Root")selectnew{NetCharge=x.Element("Charges")?.Element("NetCharge")?.Value??"0",TotalCharge=x.Element("Charges")?.Element("TotalCharge")?.Value??"0"}).SingleOrDefault();您可以在此处标题为Null条件运算符的部分中阅读更多内容。以上就是C#学习教程:查看从XML到Null元素的LINQ的所有分享内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
