Почему не работает инкремент в C#

нужно вывести ключи словаря, который является а-ля базой данных, где хранится ключ-сервис в виде строки и его значение-список в котором логин и пароль. При выводе слева от сервиса должен быть его порядковый номер (чтобы пользователь в последствии мог получить пароль и логин по номеру), но почему то везде показывается порядковый номер 1. Как это исправить? Заранее спасибо!

static void Main(string[] args){
    Dictionary<string, List<string>> dataBase = new Dictionary<string, List<string>>();
    
    InsertInToDict(dataBase, "Steam", "Alex2004", "qwert12345");
    InsertInToDict(dataBase, "discord", "Adam1337", "12345678");
    InsertInToDict(dataBase, "Spotify", "marcl2001", "klsjdhfvb12345");
    InsertInToDict(dataBase, "YouTube", "Mark1234", "abcd1234");

    foreach (string key in dataBase.Keys)
    {
        int number = 1; 
        Console.WriteLine($"{number}-{key}");
        number++;
    }
static void InsertInToDict(Dictionary<string, List<string>> dict, string servise, string login,  string password)
    {
        List<string> dataList = new List<string>();
        dataList.Add(servise);
        dataList.Add(password);

        dict.Add(servise, dataList);
    }
}

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Faraday

Есть такое понятие как scope, или область видимости. Так же есть понятие времени жизни переменной. Каждая переменная живёт в рамках тела, в котором она объявлена. Тело обозначается фигурными скобками { }.

Цикл работает таким образом, что постоянно повторяется выполнение тела цикла. У вас вот такой случай:

foreach (string key in dataBase.Keys)
{
    int number = 1; 
    Console.WriteLine($"{number}-{key}");
    number++;
}

Так в чём же ошибка? В том, что при каждой итерации вы объявляете переменную number и говорите, что она будет равна 1 при каждой итерации. Что бы выправить это, вынесите её за рамки цикла вот так:

int number = 1;
foreach (string key in dataBase.Keys)
{ 
    Console.WriteLine($"{number}-{key}");
    number++;
}
→ Ссылка