Каждая проблема в c#

#c# #.net

Вопрос:

Я пишу простое приложение для заметок на консоли, и у меня возникли некоторые проблемы с функцией «foreach». Когда я ввожу «Просмотр», заметки должны отображаться по порядку, но вместо этого для каждой заметки я получаю «0».’0′ ‘1’ ‘2’.

примечания pic

 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:

Здесь три варианта

  1. Используйте notes.IndexOf()
     foreach (string item in notes)
    {
        int indexNote = notes.IndexOf(item);
        Console.WriteLine($"{indexNote}. {item}");                                                   
    }
     
  2. Используйте счетчик
     int counter = 0;
    foreach (string item in notes)
    {
        Console.WriteLine($"{counter}. {item}");                                                   
        counter  ;
    }
     
  3. Используйте цикл 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}");
}