Нужна помощь в выводе List
Этот метод рисует меню, он выводит сами строки и по средству переключения стрелочками меняет цвет при выборе пункта. Но выводит он не каждый пункт меню (их 3), а все вместе и 3 раза (из-за вложенного foreach в for) и я не могу понять, как мне оставить эту смену цвета, но выводить каждый пункт меню по 1 разу.
Я переписал элементы меню с массивов на листы и вот возникла такая проблема.
public static void DrawMenu(List<MenuItems> items, int index, string text)
{
ConsoleHelper.ClearScreen();
Console.WriteLine(text);
for (int i = 0; i < items.Count; i++)
{
if (i == index)
{
Console.BackgroundColor = ConsoleColor.Gray;
Console.ForegroundColor = ConsoleColor.Black;
}
foreach (MenuItems item in items)
{
Console.WriteLine(item.Text);
}
Console.ForegroundColor = ConsoleColor.Black;
Console.BackgroundColor = ConsoleColor.White;
}
Console.WriteLine();
}
https://gitlab.com/IlyaKvashnin/TimeTrees/-/tree/lab2-add-and-write
Прикрепляю гитлаб, если нужна вся программа
Ответы (1 шт):
Не нужен здесь никакой foreach.
public static void DrawMenu(List<MenuItems> items, int index, string text)
{
ConsoleHelper.ClearScreen();
Console.WriteLine(text);
for (int i = 0; i < items.Count; i++)
{
if (i == index)
{
Console.BackgroundColor = ConsoleColor.Gray;
Console.ForegroundColor = ConsoleColor.Black;
}
Console.WriteLine(items[i].Text);
Console.ForegroundColor = ConsoleColor.Black;
Console.BackgroundColor = ConsoleColor.White;
}
Console.WriteLine();
}
Я переписал элементы меню с массивов на листы и вот возникла такая проблема.
Зачем? Я не вижу, что вы где-либо модифицируете списки. А если коллекцию не надо модифицировать, то чем вам массив не угодил? А вообще для данного метода разницы нет, список там или массив.
У вас наверное был string[], но вы создали класс MenuItems - это хорошо. Перестало работать, как раз когда вы тип поменяли, а не списки ввели. Можно было использовать MenuItems[] вместо списка, и получился бы тот же эффект. Кстати, у вас внутри класса MenuItems один айтем, тогда почему он называется не MenuItem? Подумайте над названием.