#c# #.net
Вопрос:
Я пишу простое приложение для заметок на консоли, и у меня возникли некоторые проблемы с функцией «foreach». Когда я ввожу «Просмотр», заметки должны отображаться по порядку, но вместо этого для каждой заметки я получаю «0».’0′ ‘1’ ‘2’.
using System;
using System.Collections.Generic;
namespace note_app_console
{
class Program
{
static void Main(string[] args)
{
List <String> notes = new List<string>();
Console.WriteLine("Notes");
int userInput;
//main loop
do
{
string addNote;
//selecting action from menu
userInput = Convert.ToInt32(Console.ReadLine());
switch (userInput)
{
case 1:
Console.WriteLine("Enter the note content: ");
addNote = Console.ReadLine();
notes.Add(addNote);
Console.WriteLine("Note added.");
break;
case 2:
Console.WriteLine("Your notes: ");
foreach (string i in notes)
{
int indexNote = i.IndexOf(i);
Console.WriteLine($"{Convert.ToString(indexNote)}. {i}");
}
break;
}
} while (userInput != 4);
}
}
}
Комментарии:
1. Вы ищете индекс i в i , Это должны быть заметки . Индекс(i)
2. Еще лучше использовать
for
цикл, в котором у вас есть индекс, или просто создать индекс перед циклом и увеличивать его в цикле вместо поиска индекса в списке.3. К вашему сведению, в настоящее время вы выполняете поиск индекса подстроки в строке, где подстрока является строкой, и это всегда будет возвращать 0.
Ответ №1:
Здесь три варианта
- Используйте
notes.IndexOf()
foreach (string item in notes) { int indexNote = notes.IndexOf(item); Console.WriteLine($"{indexNote}. {item}"); }
- Используйте счетчик
int counter = 0; foreach (string item in notes) { Console.WriteLine($"{counter}. {item}"); counter ; }
- Используйте цикл for
for(int i=0; i<notes.Count; i ) { Console.WriteLine($"{i}. {notes[i]}"); }
Обратите внимание, что нет необходимости преобразовывать целое число в строку в WriteLine()
инструкции, так как интерполяция строк делает это автоматически.
Ответ №2:
Во-первых, ваши имена переменных сбивают с толку. измените значение foreach (string i in notes)
на foreach (string note in notes)
.
Во-вторых, найдите индекс текущей заметки в массиве заметок, поэтому измените значение i.IndexOf(i)
на notes.IndexOf(note)
foreach (string note in notes)
{
int idx = notes.IndexOf(note);
Console.WriteLine($"{Convert.ToString(idx)}. {note}");
}