Гид по технологиям

Как создать консольное To‑do приложение на C#

• 5 min read • Программирование • Обновлено 18 Nov 2025
Консольное To‑do приложение на C# — руководство
Консольное To‑do приложение на C# — руководство

Список дел на бумаге

Коротко: создание To‑do приложения — отличный практический проект для начинающих. Вы научитесь обрабатывать ввод пользователя, хранить данные в коллекциях, использовать условные операторы и циклы. Для примера мы используем консольное приложение C# в Visual Studio.

Зачем это полезно

To‑do приложение иллюстрирует базовые концепции разработки:

  • CRUD‑операции: создание (Create), чтение (Read), удаление (Delete).
  • Работа с коллекциями (List). Определение индексов, проверка границ.
  • Управление циклом жизни программы (while, switch/if).
  • Прикладное взаимодействие с пользователем через консоль.

Определение: List — динамический массив в C#, удобный для добавления и удаления элементов.

Как создать новое консольное приложение

Ниже краткая последовательность действий для Visual Studio. Полный исходный код можно разместить на GitHub для дальнейшего изучения.

  1. Откройте Visual Studio на компьютере.
  2. Нажмите Create a new project (Создать новый проект). Страница создания нового проекта
  3. Выберите шаблон C# Console Application, затем нажмите Next. Создание нового консольного проекта
  4. Задайте имя проекта и папку для решения. Страница выбора имени и расположения проекта
  5. Оставьте Target Framework по умолчанию и нажмите Create. Выбор целевой платформы при создании проекта

Важно: для новичка подходит шаблон консольного приложения — он минимален и позволяет сосредоточиться на логике программы.

Простой план разработки (мини‑методология)

  1. Создать проект.
  2. Импортировать нужные пространства имён (namespace).
  3. Объявить коллекцию для задач.
  4. Реализовать цикл меню (display / input / action).
  5. Добавить обработку добавления, отображения и удаления.
  6. Протестировать сценарии ошибок (пустая строка, неверный индекс).

Как добавить задачу в список

После создания проекта вы увидите автоматически сгенерированную программу «Hello World». Заменим её логикой управления списком задач.

  1. В начале файла добавьте пространство имён для коллекций:
using System; 
using System.Collections.Generic;
  1. Объявите enum для действий пользователя:
enum UserChoice {
    AddTask = 1,
    DeleteTask,
    Exit
}
  1. В методе Main удалите код «Hello World» и создайте список задач и бесконечный цикл меню:
static void Main(string[] args)
{
    List toDoList = new List();

    while (true)
    {
        // здесь будет логика отображения, ввода и выполнения действий
    }
}
  1. Отобразите варианты действий и прочитайте выбор пользователя:
Console.WriteLine("1. Add task");
Console.WriteLine("2. Delete task");
Console.WriteLine("3. Exit");
int choice = int.Parse(Console.ReadLine());
  1. Обработка добавления задачи (пример с if):
if (choice == (int)UserChoice.AddTask)
{
    Console.Write("Enter task: ");
    string task = Console.ReadLine();

    if (!string.IsNullOrWhiteSpace(task))
    {
        toDoList.Add(task);
        Console.Clear();
        Console.WriteLine("Task added successfully!");
    }
    else
    {
        Console.WriteLine("Task cannot be empty.");
    }
}

Примечание: лучше использовать int.TryParse для безопасного разбора ввода; это мы покажем в финальном примере кода.

Запуск приложения в Visual Studio

Как отображать задачи

Перед тем как предлагать действия, показывайте текущие задачи — так пользователь видит контекст.

if (toDoList.Count > 0)
{
    Console.WriteLine("To-do List:");
    for (int i = 0; i < toDoList.Count; i++)
    {
        Console.WriteLine("- " + toDoList[i]);
    }
    Console.WriteLine();
}
else
{
    Console.WriteLine("You currently have no tasks in your To-do list.");
    Console.WriteLine();
}

Добавление задачи в список

Совет: при большом количестве задач полезно нумеровать их при выводе, чтобы пользователь видел индекс для удаления или редактирования.

Как удалить задачу

Добавим в enum действие удаления, расширим меню и обработку.

if (choice == (int)UserChoice.DeleteTask)
{
    if (toDoList.Count > 0)
    {
        Console.WriteLine("Enter the number of the task you want to delete:");
        for (int i = 0; i < toDoList.Count; i++)
        {
            Console.WriteLine("(" + (i + 1) + ") " + toDoList[i]);
        }

        if (int.TryParse(Console.ReadLine(), out int taskNum))
        {
            taskNum--;
            if (taskNum >= 0 && taskNum < toDoList.Count)
            {
                toDoList.RemoveAt(taskNum);
                Console.Clear();
                Console.WriteLine("Task deleted successfully!");
                Console.WriteLine();
            }
            else
            {
                Console.Clear();
                Console.WriteLine("Invalid task number.");
                Console.WriteLine();
            }
        }
        else
        {
            Console.WriteLine("Please enter a valid number.");
        }
    }
    else
    {
        Console.WriteLine("There are no tasks to delete.");
    }
}

Удаление задачи из списка

Подтверждение операции удаления

Полный пример кода (консольное приложение)

Ниже приведён цельный и устойчивый пример консольного To‑do приложения. Скопируйте его в Program.cs и запустите.

using System;
using System.Collections.Generic;

enum UserChoice
{
    AddTask = 1,
    DeleteTask,
    Exit
}

class Program
{
    static void Main(string[] args)
    {
        List toDoList = new List();

        while (true)
        {
            Console.Clear();

            if (toDoList.Count > 0)
            {
                Console.WriteLine("To-do List:");
                for (int i = 0; i < toDoList.Count; i++)
                    Console.WriteLine($"({i + 1}) {toDoList[i]}");
                Console.WriteLine();
            }
            else
            {
                Console.WriteLine("You currently have no tasks in your To-do list.");
                Console.WriteLine();
            }

            Console.WriteLine("1. Add task");
            Console.WriteLine("2. Delete task");
            Console.WriteLine("3. Exit");
            Console.Write("Choice: ");

            if (!int.TryParse(Console.ReadLine(), out int choice))
            {
                Console.WriteLine("Please enter a valid number.");
                Console.ReadKey();
                continue;
            }

            if (choice == (int)UserChoice.AddTask)
            {
                Console.Write("Enter task: ");
                string task = Console.ReadLine();
                if (!string.IsNullOrWhiteSpace(task))
                {
                    toDoList.Add(task.Trim());
                    Console.WriteLine("Task added successfully!");
                }
                else
                {
                    Console.WriteLine("Task cannot be empty.");
                }
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
            }
            else if (choice == (int)UserChoice.DeleteTask)
            {
                if (toDoList.Count == 0)
                {
                    Console.WriteLine("There are no tasks to delete.");
                    Console.WriteLine("Press any key to continue...");
                    Console.ReadKey();
                    continue;
                }

                Console.WriteLine("Enter the number of the task you want to delete:");
                for (int i = 0; i < toDoList.Count; i++)
                    Console.WriteLine($"({i + 1}) {toDoList[i]}");

                if (int.TryParse(Console.ReadLine(), out int taskNum))
                {
                    taskNum--;
                    if (taskNum >= 0 && taskNum < toDoList.Count)
                    {
                        toDoList.RemoveAt(taskNum);
                        Console.WriteLine("Task deleted successfully!");
                    }
                    else
                    {
                        Console.WriteLine("Invalid task number.");
                    }
                }
                else
                {
                    Console.WriteLine("Please enter a valid number.");
                }
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
            }
            else if (choice == (int)UserChoice.Exit)
            {
                break;
            }
            else
            {
                Console.WriteLine("Unknown option. Try again.");
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
            }
        }
    }
}

Тесты и критерии приёмки

Критерии приёмки:

  • Приложение запускается без ошибок.
  • Можно успешно добавить задачу — она появляется в списке.
  • Можно удалить задачу по номеру — список обновляется.
  • Приложение корректно обрабатывает пустой ввод и неверный номер.

Примеры тестов (acceptance):

  1. Добавить задачу “Купить хлеб” — задача появляется в выводе.
  2. Попытаться удалить задачу с номером 0 — приложение сообщает об ошибке.
  3. Удалить последнюю задачу — список пуст.
  4. Ввести нечисловой ввод в меню — программа просит ввести число.

Альтернативные подходы и расширения

  1. Долговременное хранение: использовать файл (JSON/CSV) или базу данных SQLite вместо List для сохранения между запусками.
  2. GUI: реализовать интерфейс на Windows Forms или WPF для кнопок, списков и диалогов.
  3. Web‑версия: ASP.NET Core + фронтенд — если хотите выносить приложение в браузер.
  4. Добавить возможность редактирования задач, пометки статуса (выполнено/в работе), приоритет и дату выполнения.

Когда это не подойдёт:

  • Если нужна многопользовательская система или облачный доступ — консоль слишком ограничена.
  • Для больших объёмов данных нужен другой подход хранения и пагинация.

Ментальные модели и соглашения

  • Модель CRUD: добавление, просмотр, обновление, удаление — основа интерфейсов управления данными.
  • Данные в памяти = быстрый доступ, но недолговечны. Для устойчивости сохраняйте на диск.
  • Валидация ввода на каждом шаге уменьшает количество ошибок.

Роли и чек-листы

Для новичка:

  • Создать проект.
  • Реализовать добавление задач.
  • Реализовать показ задач.
  • Реализовать удаление по номеру.
  • Обработать неверный ввод.

Для ревьюера/наставника:

  • Проверить обработку исключений.
  • Проверить корректность индексов при удалении.
  • Посоветовать улучшения UX (подтверждения, отмена).

Шаблоны и заготовки

Таблица приоритетов (пример для расширения):

ПриоритетОписание
ВысокийСрочные задачи, дедлайн сегодня
СреднийВажные, но не срочные
НизкийМожно отложить

Можно расширить структуру задачи до класса TaskItem с полями Title, DueDate, Priority, IsDone.

Безопасность и приватность

В консольном приложении локальные данные обычно хранятся на машине пользователя. Если добавляете синхронизацию/облачное хранилище — учитывайте шифрование и управление доступом.

Краткое резюме

  • Консольный To‑do — простой и эффективный проект для практики C#.
  • Начните с List, затем добавьте хранение в файл или GUI.
  • Тестируйте граничные случаи и обработку ввода.

Важно: после освоения консольной версии переходите к Windows Forms или веб‑решениям, чтобы научиться разделять логику и представление (MVVM/MVC).

Дополнительные ресурсы и идеи проектов

  • Преобразовать приложение в Windows Forms с ListBox и кнопками.
  • Сохранение в JSON — использовать System.Text.Json для сериализации.
  • Реализовать экспорт/импорт задач в CSV.

Вы успешно создали простое To‑do приложение на C#. Теперь можно постепенно усложнять проект: добавлять GUI, хранение на диске, фильтры и сортировку задач.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро