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

Создание консольного To‑do приложения на C#

6 min read C++ Обновлено 05 Jan 2026
To‑do приложение на C# — консольное руководство
To‑do приложение на C# — консольное руководство

To do list on paper

Изучение C# через создание To‑do приложения — полезное упражнение для начинающих. С помощью этого приложения пользователь может добавлять задачи, просматривать список задач и удалять элементы. Приложение охватывает ключевые основы программирования: ввод пользователя, хранение данных в коллекциях, условные операторы и циклы.

Ниже приведён подробный набор шагов для создания простого консольного приложения в Visual Studio. В конце — дополнительные рекомендации, сценарии тестирования, шаблоны и идеи для развития проекта.

Почему стоит учить C# на простых проектах

Коротко о причинах выбрать C# для учебного проекта:

  • C# — язык с сильной типизацией и ясным синтаксисом, удобен для изучения принципов ООП и структур данных.
  • Платформа .NET даёт богатую стандартную библиотеку и инструменты (Visual Studio), что ускоряет разработку.
  • Консольные приложения позволяют сосредоточиться на логике без фронтенд‑слоя.

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

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

Полный исходный код этого проекта можно разместить на GitHub для хранения и версий.

  1. Откройте приложение Visual Studio на компьютере.
  2. Нажмите на «Create a new project». Create new project page
  3. Выберите тип проекта «C# Console Application» и нажмите «Next». Create new console app project
  4. Укажите имя проекта и папку для решения. Create project name and location page
  5. Оставьте значение Target Framework по умолчанию и нажмите «Create». Create project choose target framework page

После создания проекта Visual Studio сгенерирует простой “Hello World”. Его нужно заменить на код логики To‑do списка.

Основная логика: добавление задачи

В консольном приложении можно использовать вывод (Console.Write/WriteLine) для запроса данных у пользователя и Console.ReadLine для получения ввода.

  1. В начале файла подключите пространство имён, позволяющее работать со списками:
using System.Collections.Generic;
  1. Внутри метода Main() удалите код Hello World и объявите новый список для хранения задач:
List toDoList = new List();
  1. Создайте цикл, который будет выполняться, пока пользователь не завершит программу:
while (true) {

}
  1. Сверху файла добавьте enum со списком возможных действий пользователя:
enum UserChoice {
  AddTask = 1,
  Exit
}
  1. Внутри цикла выводите список возможных действий и считывайте выбор пользователя (он вводит цифру):
Console.WriteLine("1. Add task");
Console.WriteLine("2. Exit");
int choice = int.Parse(Console.ReadLine());
  1. Если пользователь выбирает “1”, запросите имя задачи и добавьте его в список:
if (choice == (int)UserChoice.AddTask) {
  Console.Write("Enter task: ");
  string task = Console.ReadLine();
  toDoList.Add(task);
  Console.Clear();
  Console.WriteLine("Task added successfully!");
}
  1. Если пользователь выбирает выход, прервите цикл:
else if (choice == (int)UserChoice.Exit) {
  break;
}
  1. Запустите приложение через зелёную кнопку «Play» в Visual Studio. Run Visual Studio application green button
  2. Введите “1” и добавьте задачу. Add task in todo list

Обработка неверного ввода

Вместо int.Parse рекомендуется использовать int.TryParse, чтобы избежать исключений при вводе нечисловых значений. Это небольшое улучшение значительно повышает устойчивость программы.

Как отображать задачи в списке

Перед тем как предложить пользователю добавить задачу, полезно показывать текущие элементы списка.

  1. Внутри цикла Main() добавьте условие, проверяющее, не пуст ли список:
while (true) {
  if (toDoList.Count > 0) {

  }

  Console.WriteLine("1. Add task");
  Console.WriteLine("2. Exit");
}
  1. Если список содержит элементы, пробегитесь по нему и выведите каждый элемент в виде маркированного списка:
if (toDoList.Count > 0) {
  Console.WriteLine("To-do List:");

  for (int i = 0; i < toDoList.Count; i++) {
    Console.WriteLine("- " + toDoList[i]);
  }

  Console.WriteLine("");
}
  1. Если список пуст, покажите соответствующее сообщение:
else {
  Console.WriteLine("You currently have no tasks in your To-do list.");
  Console.WriteLine("");
}
  1. Запустите приложение и добавьте элементы — консоль будет обновлять список. View items in to do list

Совет: логика вывода и логика ввода/меню должны быть краткими методами, чтобы Main() оставался читаемым. В небольшом проекте можно выносить в отдельные функции: ShowList(), ShowMenu(), HandleInput().

Как удалять задачи из списка

При удалении задачи снова покажите список и попросите ввести номер удаляемого элемента.

  1. Обновите enum, добавив действие удаления:
enum UserChoice {
  AddTask = 1,
  DeleteTask,
  Exit
}
  1. Обновите меню действий:
Console.WriteLine("1. Add task");
Console.WriteLine("2. Delete task");
Console.WriteLine("3. Exit");
  1. Добавьте ветку обработки выбора удаления:
else if (choice == (int)UserChoice.DeleteTask) {

}
  1. Если список не пуст, выведите элементы с номерами, чтобы пользователь мог выбрать нужный:
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]);
  }
}
  1. Считайте ввод пользователя, преобразуйте в индекс и удалите элемент с помощью RemoveAt():
int taskNum = int.Parse(Console.ReadLine());
taskNum--;

if (taskNum >= 0 && taskNum < toDoList.Count) {
  toDoList.RemoveAt(taskNum);
  Console.Clear();
  Console.WriteLine("Task deleted successfully!");
  Console.WriteLine("");
}
  1. Добавьте проверку на неверный номер задачи:
else {
  Console.Clear();
  Console.WriteLine("Invalid task number.");
  Console.WriteLine("");
}
  1. Запустите и проверьте добавление и удаление задач. Delete item in to do list Delete item in to do list

Полный пример кода (развязка)

Ниже приведён компактный, но практичный пример полного консольного приложения To‑do. Он включает базовую валидацию ввода и обработку трёх действий.

using System;
using System.Collections.Generic;

enum UserChoice { AddTask = 1, DeleteTask, Exit }

class Program {
  static void Main() {
    List toDoList = new List();

    while (true) {
      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();
      }

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

      if (!int.TryParse(Console.ReadLine(), out int choice)) {
        Console.Clear();
        Console.WriteLine("Invalid input.");
        continue;
      }

      if (choice == (int)UserChoice.AddTask) {
        Console.Write("Enter task: ");
        string task = Console.ReadLine();
        toDoList.Add(task);
        Console.Clear();
        Console.WriteLine("Task added successfully!");
      } else 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)) {
            Console.Clear();
            Console.WriteLine("Invalid input.");
          } else {
            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.Clear();
          Console.WriteLine("You currently have no tasks in your To-do list.");
          Console.WriteLine();
        }
      } else if (choice == (int)UserChoice.Exit) {
        break;
      } else {
        Console.Clear();
        Console.WriteLine("Unknown choice.");
      }
    }
  }
}

Советы по расширению приложения и альтернативы

  1. Хранение данных:

    • В памяти (List) — подходит для учебных целей.
    • В файл (текстовый или JSON) — сохраняет задачи между запусками.
    • В базу данных (SQLite) — удобно для масштабирования.
  2. Интерфейс:

    • Консоль → быстрый старт.
    • Windows Forms / WPF → графический интерфейс для практики UI.
    • ASP.NET Core → превратите приложение в веб‑сервис.
  3. Дополнительные функции:

    • Метки/приоритеты/дедлайны для задач.
    • Фильтры и поиск.
    • Экспорт/импорт в CSV или JSON.

Ментальные модели и эвристики

  • Keep It Simple: сначала реализуйте минимально рабочий продукт (MVP) — добавление, отображение, удаление.
  • Разделение ответственности: UI‑логика не должна быть смешана с логикой работы со списком.
  • Fail fast: проверяйте ввод пользователя сразу и давайте понятные сообщения об ошибке.

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

  • Можно добавить задачу: при вводе текст добавляется в список и виден в выводе.
  • Можно удалить задачу по номеру: выбранный элемент удаляется и список обновляется.
  • Приложение не падает при вводе нечисловых значений: используется валидация ввода.
  • Действия меню понятны пользователю и доступны с клавиатуры.

Тесты и сценарии приёмки

  • Добавление пустой строки: проверка, будет ли добавлена пустая задача или отклонена.
  • Ввод нечислового значения в меню: программа должна выводить сообщение об ошибке и продолжать работу.
  • Удаление по недопустимому номеру (0, отрицательное, больше длины списка): должно появляться сообщение “Invalid task number.”.
  • Последовательность действий: добавить несколько задач, удалить среднюю, проверить порядок оставшихся.

Чеклист для ролей

  • Для ученика:

    • Написать и запустить приложение.
    • Добавить обработку ошибок ввода.
    • Реализовать сохранение задач в файл.
  • Для ревьюера:

    • Проверить читаемость кода и разделение логики.
    • Убедиться, что есть базовая валидация ввода.
    • Протестировать сценарии с граничными значениями.

Примеры альтернатив и когда они уместны

  • Если нужно многопользовательское приложение или синхронизация — используйте сервер и базу данных (ASP.NET + PostgreSQL/SQL Server).
  • Для простого личного списка на одном компьютере подойдёт файл или SQLite.
  • Если цель — изучать UI, переходите на Windows Forms или WPF.

Безопасность и конфиденциальность

В консольном To‑do обычно не хранится чувствительная информация. Тем не менее:

  • Не храните пароли или персональные данные в открытом виде.
  • При экспорте в файлы сообщайте пользователю о формате и местоположении.

Глоссарий (1 строка)

  • List: динамический массив строк в .NET.
  • enum: перечисление — набор именованных констант.
  • Console.ReadLine/WriteLine: ввод/вывод в консоли.

Заключение

Вы успешно создали простое консольное To‑do приложение на C#. Это хорошая отправная точка: дальше можно добавить сохранение данных, графический интерфейс, фильтры и синхронизацию. Начните с MVP, затем добавляйте функциональность итеративно.

Важно: расширяйте проект маленькими шагами и проверяйте каждый новый кусок функциональности тестами.

Сводка:

  • Реализованы базовые операции: добавить, показать, удалить задачу.
  • Программа устойчива к нечисловому вводу (в примере используется TryParse).
  • Рекомендованы варианты сохранения и развития проекта.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Сохранение и загрузка в PyGame — руководство
Разработка игр

Сохранение и загрузка в PyGame — руководство

Удаление паролей и сброс Keychain на macOS
macOS

Удаление паролей и сброс Keychain на macOS

Как стать рецензентом на Reedsy Discovery
Книги

Как стать рецензентом на Reedsy Discovery

Сумма первых n натуральных чисел рекурсией
Алгоритмы

Сумма первых n натуральных чисел рекурсией

Отменить подписку Minecraft Realms и сохранить мир
Minecraft

Отменить подписку Minecraft Realms и сохранить мир

Как удалить или скрыть Mail на Mac
macOS

Как удалить или скрыть Mail на Mac