Почему не работает инкремент в 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 шт):
Есть такое понятие как 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++;
}