XDocument: условно создайте новый XElement - PullRequest
11 голосов
/ 21 октября 2010

Мой вопрос касается условного создания XElements, то есть, если выполняется какое-либо условие, создать 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", ""))
    ));

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

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

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

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

1 Ответ

28 голосов
/ 21 октября 2010

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

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

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

...