2010-01-14 65 views
2

僅供參考,這是非常類似於我的最後一個問題:Is there a faster way to check for an XML Element in LINQ to XML?有沒有更快的方法檢查LINQ to XML中的XML元素,並解析一個bool?

當前我使用以下擴展方法,我使用LINQ to XML檢索元素的布爾值。它使用Any()來查看是否有任何具有給定名稱的元素,如果存在,它將分析bool的值。否則,它返回false。這個方法的主要用途是當我將XML解析爲C#對象時,所以當一個元素不在時,我不希望任何東西爆炸。我可以改變它來嘗試解析,但現在我假設如果元素在那裏,那麼解析應該成功。

有沒有更好的方法來做到這一點?

/// <summary> 
/// If the parent element contains a element of the specified name, it returns the value of that element. 
/// </summary> 
/// <param name="x">The parent element.</param> 
/// <param name="elementName">The name of the child element to check for.</param> 
/// <returns>The bool value of the child element if it exists, or false if it doesn't.</returns> 
public static bool GetBoolFromChildElement(this XElement x, string elementName) 
{ 
    return x.Elements(elementName).Any() ? bool.Parse(x.Element(elementName).Value) : false; 
} 
+0

你可以使用正則表達式來達到特定的目的。返回re.compile('。* <'+ elementName +'>。*')。match(xml.ToString()) – 2010-01-14 17:06:48

回答

4

非常相似,最後一次:

return ((bool?) x.Element(elementName)) ?? false; 

注意使用轉化爲可空布爾類型,而不是不可爲空的版本;如果輸入爲空,則不可爲空的版本將引發異常。

這裏使用空合併運算符意味着整體表達式類型只是bool

+0

聖牛,我從來沒有想過null-coalescing操作符會這樣做!你是那個人。 – 2010-01-14 19:09:02

+0

@SkippyFire:在合適的情況下,空合併操作符非常棒。如果我們得到一個無效的解引用操作符,它會更好:) – 2010-01-14 19:55:16