我真的尝试过这个但是却无法让它发挥作用。 我有一堆文件,我使用Linq解析,但其中一些文件有其他人没有的字段。没有办法知道文件名。
以下是针对该文件运行的代码:
<head>
现在问题是他们中的一些人没有Element(&#34; PODTime&#34;)所以我需要一个不同的linq查询。我只是要尝试/捕获,如果失败则运行另一个(cludgy我知道)。 但很明显,只要我将更新放在try / catch中,我就无法再在它之外访问它。
通常我会在try / catch之前定义它 - 但是我无法在这里工作。
我试过了:
var update = from d in document.Descendants("Update")
select new
{
OrderNumber = d.Element("OrderNumber").Value,
StopID = d.Element("StopID").Value,
TransmissionTime = d.Element("TransmissionTime").Value,
EventTime = d.Element("PODTime").Value,
recordCreated = d.Element("EventTime").Value,
EventType = d.Element("EventType").Value,
EventCode = d.Element("EventCode").Value,
POD = d.Element("POD").Value,
Note = d.Element("Note").Value,
CustomerID = d.Element("CustomerID").Value,
OrderID = d.Element("OrderID").Value,
StopRef = d.Element("StopRef").Value,
PieceCount = d.Element("PieceCount").Value,
TotalWeight = d.Element("TotalWeight").Value,
DriverID = d.Element("DriverID").Value
};
但那不对。如果有人可以指出我正确的方向,我会推荐它。
解决方案: 使用Sledgehammers nudge结合Let:
System.Linq.Enumerable update = new System.Linq.Enumerable();
答案 0 :(得分:2)
你可以使用新的吗?运营商:
d.Element("CustomerID")?.Value
或者,如果您无法使用最新的C#,您可以编写一个“安全”方法来包含所有来电:
string SafeGetValue(XElement elem)
{
if (elem == null)
return null;
return elem.Value;
}