2011-06-20 17 views
6

鑑於這樣的事情:優雅的方式來應對鏈的XElement軸方法空引用

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

有一種優雅的方式來處理空胡說或任何元素,從而導致剛剛在這些空或空案件?

我知道我可以拆分查詢並手動進行這些檢查,但想知道是否有更簡潔的東西。

回答

6

你可以添加一些擴展方法來爲你做這個。對於Element方法,您將返回null或元素本身。對於Elements方法,您將返回空結果或目標元素。

這些擴展方法:

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); 
    } 
} 

可以以這種方式使用它們:

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

如果你沒有查詢ElementsOrEmpty和您的最後一個請求是ElementOrDefault你會檢查爲null而不是使用Enumerable.Any方法。

+0

完美。謝謝。 – MangoBrainz

+0

希望從鍵盤到.net framework v.next。 –