2011-06-20 6 views
6

Biorąc pod uwagę coś takiego:elegancki sposób na radzenie sobie z zerowymi odniesień w przykuty metod osi Xelement

var results = theElement.Element("Blah").Element("Whatever").Elements("Something"); 

Czy istnieje elegancki sposób na radzenie sobie z pustym Blah lub cokolwiek elementem więc wyniki są po prostu null lub pusty w nich przypadki?

Wiem, że mogę podzielić zapytanie i ręcznie wykonać te kontrole, ale zastanawiałem się, czy istnieje coś bardziej zwięzłego.

Odpowiedz

6

Możesz dodać kilka metod rozszerzenia, aby zrobić to za Ciebie. Dla metody Element powinieneś zwrócić wartość null lub sam element. Dla metody Elements powinieneś zwrócić pusty wynik lub elementy docelowe.

Są to rozszerzenie metod:

public static class XElementExtensions 
{ 
    public static XElement ElementOrDefault(this XElement element, XName name) 
    { 
     if (element == null) 
      return null; 

     return element.Element(name); 
    } 

    public static IEnumerable<XElement> ElementsOrEmpty(this XElement element, XName name) 
    { 
     if (element == null) 
      return Enumerable.Empty<XElement>(); 

     return element.Elements(name); 
    } 
} 

Można ich używać w ten sposób:

var query = theElement.ElementOrDefault("Blah") 
         .ElementOrDefault("Whatever") 
         .ElementsOrEmpty("Something"); 
if (query.Any()) 
    // do something 
else 
    // no elements 

Jeśli nie jesteś zapytań dla ElementsOrEmpty i ostatnia prośba jest dla ElementOrDefault chcesz sprawdzić dla wartości null zamiast metody Enumerable.Any.

+0

Idealny. Dzięki. – MangoBrainz

+0

Mam nadzieję, że z klawiatury do platformy .NET v.next. –

Powiązane problemy