Я только изучаю LINQ и, в частности, LINQ to XML, и я написал запрос, который работает, но мне интересно, если я делаю это немного округленно Можно ли улучшить код?
У меня есть XDocument:
<SomeDocument>
<Prop1> val1 </Prop1>
<Prop2> val2 </Prop2>
<Prop3> val3 </Prop3>
</SomeDocument>
Но Prop1, Prop2 и Prop3 могут отсутствовать. Могут быть другие XDocuments, которые я буду анализировать с одним и тем же кодом, которые имеют разные свойства. Но меня интересует только XDocument, если в нем есть Prop1 или оба Prop1 и Prop2.
var query = from n in xml.Elements()
where n.Name == "Prop1" || n.Name == "Prop2"
select new {n.Name, n.Value};
string prop1 = null;
string prop2 = null;
foreach (var n in query)
{
if (n.Name == "Prop1") prop1 = n.Value;
if (n.Name == "Prop2") prop2 = n.Value;
}
if (string.IsNullOrEmpty(prop1)) { //error }
if (string.IsNullOrEmpty(prop2)) { DoMethod1(prop1); }
else { DoMethod2(prop1, prop2); }
Код после запроса мне кажется слишком длинным, хотя я не уверен, что есть лучший способ сделать то, что я пытаюсь сделать. Найдите 1 или 2 явных узла и вызовите соответствующие методы в зависимости от того, какие (если они есть) узлы найдены.