我在.resx
文件中获取了许多元素的值。在某些data
元素上,<comment>
子元素不存在,因此当我运行以下内容时,我将获得NullReferenceException
。
foreach (var node in XDocument.Load(filePath).DescendantNodes())
{
var element = node as XElement;
if (element?.Name == "data")
{
values.Add(new ResxString
{
LineKey = element.Attribute("name").Value,
LineValue = element.Value.Trim(),
LineComment = element.Element("comment").Value //fails here
});
}
}
我尝试了以下内容:
LineComment = element.Element("comment").Value != null ?
element.Element("comment").Value : ""
和
LineComment = element.Element("comment").Value == null ?
"" : element.Element("comment").Value
但是我仍然收到错误?任何帮助赞赏。
答案 0 :(得分:2)
答案 1 :(得分:2)
如果你要使用Linq,请不要只是部分使用它: (只需扩展S. Akbari's Answer)
values = XDocument.Load(filePath)
.DescendantNodes()
.Select(dn => dn as XElement)
.Where(xe => xe?.Name == "data")
.Select(xe => new new ResxString
{
LineKey = element.Attribute("name").Value,
LineValue = element.Value.Trim(),
LineComment = element.Element("comment")?.Value
})
.ToList(); // or to array or whatever
答案 2 :(得分:0)
将元素或属性转换为可空类型就足够了。您将获得该值或null。
int64
或
var LineComment = (string)element.Element("comment");