Ну, я не нашел более умного способа, чем итерация стратегии. Однако вы можете оставить это для функции AddRange . Таким образом, ваш код становится.
private void AddSubMenu(MenuItem item, ContextMenu menu)
{
item.MenuItems.AddRange(menu.MenuItems);
}
MenuItems возвращают MenuItemCollection, и Addrange принимает такую коллекцию, чтобы и она была удовлетворена, и мы избавились от выполнения итерации