Search code examples
c#linqlinq-to-xmlresxxelement

Checking for null values if element does not exist


I am getting values for a number of elements in a .resx file. On some of the the data elements the <comment> child element does not exist so when I run the following I will get a 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
        });
    }
}

I have tried the following:

LineComment = element.Element("comment").Value != null ? 
              element.Element("comment").Value : ""

And:

LineComment = element.Element("comment").Value == null ?
              "" : element.Element("comment").Value

However I am still getting an error? Any help appreciated.


Solution

  • Use Null-conditional (?.) Operator:

    LineComment = element.Element("comment")?.Value 
    

    It used to test for null before performing a member access.