private static void MergeInPlace(IMenuItem existingMenuItem, IMenuItem newMenuItem) { foreach (var newSubMenuItem in newMenuItem.SubItems) { var matchedSubMenuItem = existingMenuItem.SubItems?.FirstOrDefault(item => newSubMenuItem.Equals(item)); if (matchedSubMenuItem != null) { MergeInPlace(matchedSubMenuItem, newSubMenuItem); } else { existingMenuItem.Add(newSubMenuItem); } } }