Рекурсия с литералами XML в VB.NET возможна?

Если у Вас есть Javascript 1.6, или позже можно использовать Array.filter использование тривиального return true функция обратного вызова, например:

arr = arr.filter(function() { return true; });

с тех пор .filter автоматически пропуски недостающие элементы в исходном массиве.

страница MDN, связанная выше также, содержит хорошую версию проверки ошибок filter, который может использоваться в интерпретаторах JavaScript, которые не поддерживают официальную версию.

Примечание, которое это не удалит null записи, ни записи с явным undefined значение, но OP конкретно требуемые "недостающие" записи.

7
задан Drake 28 July 2009 в 11:19
поделиться

1 ответ

Рекурсия - одна из причин, почему мне нравятся XML-литералы VB.NET!

Для выполнения рекурсии вам нужна функция, которая принимает коллекцию ProfileItems и возвращает XElement. Затем вы можете рекурсивно вызывать эту функцию внутри XML-литерала.

Кроме того, для того, чтобы рекурсия работала, GetProfileItems и GetDependencies должны иметь одинаковое имя (переименовать одно из них) и отображаться с той же структурой элемента Xml. Вот как может выглядеть рекурсивная функция:

Function GetProfileItemsElement(ByVal Items As List(Of ProfileItem) As XElement
    Return <items>
               <%= From i In Items _
                   Select <item>
                              <name><%= i.Name %></name>
                              <!-- other elements here -->
                              <%= GetProfileItemsElement(i.GetDependencies) %>
                          </item> %>
           </items>
End Function

Рекурсия завершится, когда вы дойдете до элемента, который возвращает пустой список для функции GetDependencies. В этом случае вложенный элемент items будет пустым: . XML-литералы достаточно умны, чтобы комбинировать начальные и конечные теги items при отсутствии дочерних элементов.

9
ответ дан 7 December 2019 в 03:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: