Почему записи не отображаются?
string[] recordes = { };
while (true)
{
Console.WriteLine("Добро пожаловать в консольный блокнот!");
Console.WriteLine("\nВведите команду:\nСоздать запись - 1\nРедактировать запись - 2\nПосмотреть записи - 3\nВыход - 4");
int userComand = Convert.ToInt32(Console.ReadLine());
if (userComand == 1)
{
Console.Write("Введите содержание записи: ");
string record = Console.ReadLine();
recordes.Append(record);
Console.WriteLine();
Console.WriteLine();
}
else if (userComand == 2)
{
}
else if (userComand == 3)
{
for (int i = 0; i < recordes.Length; i++)
{
Console.WriteLine($"Запись номер: {recordes[i]}.");
}
}
else
{
break;
}
}
Я создаю записи, а потом нажимаю команду 3,но записи не отоброжаются.
Ответы (2 шт):
Append не изменяет сам массив, а лишь возвращает новый набор IEnumerable, поэтому строчку recordes.Append(record);
меняем на recordes = recordes.Append(record).ToArray();
, Console.WriteLine($"Запись номер: {recordes[i]}.");
- на Console.WriteLine($"Запись номер {i}: {recordes[i]}.");
Я бы для таких целей вместо string[]
использовал более подходящие структуры данных, например List<string>
Ответ на вопрос
recordes.Append(record)
создаёт новый итератор IEnumerable исходного массива с новым добавленным элементом, а не добавляет значение в исходный массив.
В любом случае стандартные массивы не рекомендуется использовать для перечислений неизвестных размеров. Если же вам надо постоянно добавлять или удалять элементы, то лучше использовать тип List<T>
:
List<string> records = new();
Добавлять записи можно через метод List<T>.Add(T element)
:
records.Add(record);
Ну а T[].Length
заменяется на List<T>.Count
:
for (int i = 0; i < records.Count; i++) {/*...*/}
Общие замечания по коду
Первым делом вынесем все команды в отдельные методы:
void AddRecord() {/*...*/}
void ShowRecords() {/*...*/}
Теперь вместо кучи условий создадим словарь команд формата id: функция
и запишем в неё все наши команды с соответствующими функциями:
Dictionary<int, Action> userCommandActions = new()
{
{ 1, AddRecord }, // Команда для добавления записи
{ 2, () => { } }, // Пустая команда (ничего не делающая)
{ 3, ShowRecords }, // Команда для отображения записей
};
Теперь при вводе новой команды мы вначале проверяем, находится ли команда в списке:
if (!userCommandActions.ContainsKey(userComand)) // Если команда не найдена
break; // Завершаем цикл
И если находим, то получаем и вызываем её:
var command = userCommandActions[userComand]; // Получаем команду
command(); // Вызываем
По хорошему конечно стоит сами записи вынести в отдельный объект, но так как вы скорее всего не знакомы с ООПом, то пока это вам рано
Итого в итоге получаем следующий код:
List<string> records = new();
Dictionary<int, Action> userCommandActions = new()
{
{ 1, AddRecord },
{ 2, () => { } },
{ 3, ShowRecords },
};
while (true)
{
Console.WriteLine("Добро пожаловать в консольный блокнот!");
Console.WriteLine("\nВведите команду:\nСоздать запись - 1\nРедактировать запись - 2\nПосмотреть записи - 3\nВыход - 4");
var inputLine = Console.ReadLine();
if (inputLine is null)
break;
int userComand = Convert.ToInt32(inputLine);
if (!userCommandActions.ContainsKey(userComand)) // Если команда не найдена
break; // Завершаем цикл
var command = userCommandActions[userComand]; // Получаем команду
command(); // Вызываем
}
void AddRecord()
{
Console.Write("Введите содержание записи: ");
string record = Console.ReadLine() ?? return;
records.Add(record);
Console.Write("\n\n");
}
void ShowRecords()
{
for (int i = 0; i < records.Count; i++)
Console.WriteLine($"Запись №{i}: {records[i]}.");
}