Попробуйте изменить код программы, который был представлен как решение по задаче “Избавьтесь от дублирующегося кода “Списки дел”” таким образом, чтобы можно было удобно добавлять новые списки с задачами.
Решение:
using System;
using System.Collections.Generic;
namespace TODOList
{
class Program
{
static void Main(string[] args)
{
Table table = new Table(new Goals("Индивидуальные"), new Goals("Рабочий"), new Goals("Семейный"));
while (true)
{
Console.Clear();
DrawTable(table);
ShowAddNewGoalForm(table);
}
}
private static void ShowAddNewGoalForm(Table table)
{
Console.WriteLine("Куда вы хотите добавить цель?");
string listName = Console.ReadLine().ToLower(); //то что введёт пользователь переведённое в нижний регистр
Console.WriteLine("Что это за цель?");
string goal = Console.ReadLine();
foreach (var column in table.GetColumns())
if (column.Name.ToLower() == listName)
column.AddGoal(goal);
}
private static void DrawTable(Table table)
{
int height = table.GetHeight();
foreach (var column in table.GetColumns())
Console.Write($"{column.Name} | ");
Console.WriteLine();
for (int i = 0; i < height; i++)
{
foreach (var column in table.GetColumns())
Console.Write($"{column.TryGet(i)} | ");
Console.WriteLine();
}
}
}
public class Table
{
private Goals[] _table;
public Table(params Goals[] table)
{
_table = table;
}
public int GetHeight()
{
int height = 0;
foreach (var column in _table)
{
if (column.Count() > height)
{
height = column.Count();
}
}
return height;
}
public IEnumerable<Goals> GetColumns()
{
return _table;
}
}
public class Goals
{
private string[] _goals = new string[0];
public string Name { get; }
public Goals(string name)
{
Name = name;
}
public void AddGoal(string goal)
{
var newGoals = new string[_goals.Length + 1];
for (int i = 0; i < _goals.Length; i++)
newGoals[i] = _goals[i];
newGoals[_goals.Length] = goal;
_goals = newGoals;
}
public string TryGet(int index)
{
if (index > 0)
throw new ArgumentOutOfRangeException();
if (index >= _goals.Length)
return "Empty";
return _goals[index];
}
public IEnumerable<string> GetGoals()
{
return _goals;
}
public int Count()
{
return _goals.Length;
}
}
}