Обработка исключений в запросе LINQ - PullRequest
1 голос
/ 08 мая 2019

У меня есть XML-файл с кучей объектов, которые могут иметь несколько полей, например:

<object>
  <obj_name>Car</obj_name>
  <field>
    <name>Brand</name>
    <type>string</type>
    <value>Volvo</value>
  </field>
  <field>
    <name>Power</name>
    <type>int</type>
    <value>200</value>
  </field>
</object>

Мне следует читать из файла только объекты, которые имеют имя и хотя бы одно поле. Допустимое поле должно иметь имя, тип (string или int) и значение. Я написал этот запрос:

var objects = from newobject in 
              XDocument.Load("input.xml").Descendants("object")
                     where (string)newobject.Element("obj_name") != ""
                     select new DataObject
                     {

                         Name = (string)newobject.Element("obj_name"),
                         Fields = new List<Field>(
                             from fields in newobject.Elements("field")
                             where (string)fields.Element("name") != ""
                             where (string)fields.Element("type") != "" && ((string)fields.Element("type") == "string" || (string)fields.Element("type") == "int")
                             where (string)fields.Element("value") != ""
                             select new Field
                             {
                                 Name = (string)fields.Element("name"),
                                 Type =  (string)fields.Element("type"),
                                 Value = (string)fields.Element("value")                                
                             })    
                     };

Работает нормально, но проблема в том, что в файле также могут быть недействительные теги, например <name>Bob</type>, которые вызывают исключения. Как я могу пропустить объекты / поля со сломанными тегами и обработать исключения в этом запросе?

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