LinqToXML, ломается, когда Node не существует. Как я могу проверить существование? - PullRequest
1 голос
/ 17 сентября 2009
var doc = XDocument.Parse(inputXML);

это взрывается, когда нет узла «количество». Как я могу проверить существование перед оценкой?

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

Мне нужно убедиться, что "сумма" доступна до оценки.

Кто-нибудь может помочь?

Спасибо всем, ~ ck в Сан-Диего

Ответы [ 2 ]

2 голосов
/ 17 сентября 2009

XElement обеспечивает явное приведение для большинства типов значений, включая Nullable<Decimal>:

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

Оттуда вы можете проверить, является ли amt значением null или использовать его свойство HasValue.

Обновление: Стоит отметить, что приведение бросит FormatException, если значение не равно Decimal. Если вы все еще хотите использовать TryParse, вы можете сохранить код простым с помощью string cast:

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

Внутренне приведение строк реализовано как пример Бена, возвращая либо null, либо element.Value.

1 голос
/ 17 сентября 2009

Попробуйте это:

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

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

    // other code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...