2009-09-16 68 views
1
var doc = XDocument.Parse(inputXML); 

當「金額」節點不存在時,這個彈出。如何在評估之前檢查是否存在?LinqToXML,當Node不存在時中斷。我如何檢查存在?

decimal amt; 
var amount = doc.Descendants("amount").SingleOrDefault().Value; 
bool amountValid = decimal.TryParse(amount, out amt); 

我需要在評估前確保「金額」可用。

任何人都可以幫忙嗎?

感謝所有, 〜CK在聖地亞哥

回答

1

試試這個:

var amountElement = doc.Descendants("amount").SingleOrDefault(); 

if (amountElement != null) 
{ 
    decimal amt; 
    bool amountValid = decimal.TryParse(amountElement.Value, out amt); 

    // other code 
} 
+0

這很好。謝謝! – Hcabnettek 2009-09-17 00:42:30

2

的XElement提供explicit casts對於大多數值類型,包括Nullable<Decimal>

var amt = (decimal?)doc.Descendants("amount").SingleOrDefault(); 

從那裏,你可以檢查如果amtnull或使用其HasValue屬性。

更新:值得指出的是,中投將拋出FormatException如果該值不是Decimal。如果你仍然想使用TryParse,你可以保持代碼的簡潔與string投:

decimal amt; 
var amount = (string)doc.Descendants("amount").SingleOrDefault(); 
bool amountValid = decimal.TryParse(amount, out amt); 

內部,串投實現像本的樣本,無論是回國還是nullelement.Value

+0

+1:不知道 - 很棒的提示! XLinq的精心設計讓我印象深刻。 – 2009-09-17 00:52:59

相關問題