XDocument: условно создать новый XElement

Мой вопрос касается условного создания XElement, то есть, если какое-то условие выполнено, создайте XElement, если нет, пропустите создание XElement? На данный момент я мог создать пустые элементы XElements, а затем удалить все пустые элементы, проверив, истинно ли IsEmpty, но это почему-то кажется неправильным ...

Я чувствую, что уместно было бы привести небольшой пример:

XDocument doc = new XDocument(new XDeclaration("1.0","utf-8","yes"),
new XElement("Books",
    new XElement("Book", new XElement("Title", "Essential LINQ"), new XElement("Author", "Charlie Calvert,Dinesh Kulkarni")),
    new XElement("Book", new XElement("Title", "C# in Depth"), new XElement("Author", "Jon Skeet")),
    new XElement("Book", new XElement("Title", "Some Title"), new XElement("Author", ""))
    ));

Представьте, что элемент «Автор» является необязательным элементом, и, если мы не знаем автора, мы просто не помещаем этот элемент в XML - простое и, на мой взгляд, уродливое решение - создать элемент , как пустой элемент, а затем удалите его.

Кто-нибудь знает, как сделать изящное решение, скажем так:

condition_met ? new XElement("Author",variable_with_value) : do not create element

С уважением и не стесняйтесь спрашивать дополнительную информацию, если это необходимо.


person Claus Pontoppidan    schedule 21.10.2010    source источник


Ответы (1)


Используйте тот факт, что при построении значения NULL пропускаются:

condition_met ? new XElement("Author", variable_with_value) : null

(LINQ to XML полон изящных небольших дизайнерских решений, подобных этому, с которыми приятно работать.)

person Jon Skeet    schedule 21.10.2010