private void AddOptionsTo(IMenu menu, params IMenuOption <IMenuItem>[] menuOptions) { foreach (var menuOption in menuOptions) { switch (menuOption) { case IMenuOption <IMenu> subMenu: menu.AddOptions(subMenu); break; case IMenuOption <IMenuFunc> menuFunc: menu.AddOptions(menuFunc); break; case null: throw new ArgumentNullException(nameof(menuOption)); default: throw new InvalidOperationException($"{nameof(menuOption)} is not a valid type."); } } }