Использование функции расширения Flatten
:
public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T, IEnumerable<T>> flattenFn) => e.SelectMany(c => c.Flatten(flattenFn));
public static IEnumerable<T> Flatten<T>(this T current, Func<T, IEnumerable<T>> childrenFn) {
var working = new Stack<T>();
working.Push(current);
while (working.Count > 0) {
current = working.Pop();
yield return current;
if (childrenFn(current) != null)
foreach (var child in childrenFn(current))
working.Push(child);
}
}
Вы можете сгладить оригинал ITEMS
List
, а затем проверить, нет ли в нем нового элемента:
var exists = ITEMS.Flatten(x => x.Child).Select(x => x.itemName).Contains(newItemID);
Если вы делаете это много, может быть целесообразно рассмотреть структуру на основе хеша, такую как Dictionary
или, если у вас есть уникальный список элементов для добавления, создайте хеш-набор из сглаженного ITEMS
дляускорить проверку.