Я пытаюсь проанализировать XML в моей модели домена. Ниже приводится часть кодаКак обрабатывать нулевые значения при разборе XML в C# .Net?
Customer customer = new Customer();
IEnumerable<XElement> elements = XElement.Load(xmlPath).Elements();
customer.ID = elements
.Where(n => n.Name.LocalName == "customers")
.Elements().Where(e => e.Name.LocalName == "id")
.FirstOrDefault().Value;
Некоторое время XML не содержит раздел «клиент», так что первый .где() возвращает положение нулевой и дальнейшую обработку как .elements() ... заставляет его бросить исключение.
Вопрос о том, как я могу просто остановиться в первом .Where(), если я не раздел в XML не существует (то есть A null) и двигаться вперед, не получая исключения?
Я могу определенно сломать запрос Linq и использовать, если ... еще проверить это. Но есть ли эффективный и хороший способ сделать это?
Это не будет работать. Потому что, прежде всего elements.Count() всегда> 0 из-за других разделов в XML присутствует. Во-вторых, во втором месте Where() для поиска «id» и, следовательно, null.FirstOrDefault() будет исключать значение null. – talaa123
[Where() не возвращает null] (https://msdn.microsoft.com/library/bb549418 (v = vs.100) .aspx), только худший список с перечислимыми наименованиями, поэтому я подозреваю, что вы получаете исключение null указателя из другого места. Вероятно FirstOrDefault() возвращает null. – Chase