C # словарь не работает, при сравнении ввода с парами ключ-значение работает только последняя пара - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь выполнить базовую проверку пароля и логина и создал словарь для хранения учетных данных. Если я введу последний логин и пароль, он будет работать, но для любой другой пары - нет.

<h1 class="header">"@success"</h1>
<input placeholder="Login" @bind="@login" />
<input placeholder="Password" @bind="@password" type="text"/>
<button @onclick="@check">check</button>
@functions
{
    private string password,login;
    bool success=false;
    private Dictionary<string, string> creds = new Dictionary<string, string>()
    {
        {"1","2" },
        {"3","4" },
        {"5","6" }
    };




    private void check()
    {

        foreach (var item in creds)
        {
            if (login == item.Key && password == item.Value)
            {
                success=true;
            }
            else
            {
                success=false;
            }
        }
    }
}

Работает, как и ожидалось, для последней пары (5 и 6), успех меняется на true. Для других пар это не работает, успех все еще ложен.

Ответы [ 3 ]

3 голосов
/ 06 октября 2019

Попробуйте отладить оператор. Формула for-each обрабатывается для каждой записи в кредитах. Это означает, что на каждой итерации переменная успеха снова устанавливается в значение true / false. Когда входные данные равны первой или второй паре кредитов, они будут перезаписаны на последней итерации, что приведет к значению false.

Вам нужно выйти из цикла foreach, когда для параметра success установлено значение true.

success = false;
foreach (var item in creds)
{
   if (login == item.key && password == item.value)
   {
      success = true;
      break;
   }
}
1 голос
/ 06 октября 2019

Вам нужно остановиться, как только вы установите успех = true

Это работает только в последней паре, потому что это последняя пара, и вы останавливаетесь:)

Вам лучше написать кодкак это:

success = creds.ContainsKey(login) && cred[login] == password;

С другой стороны, я надеюсь, что это не рабочий код, вы не должны хранить пароли в виде простого текста в памяти или где-либо еще ...

0 голосов
/ 06 октября 2019

Добавить «перерыв»;после успеха = правда;и все готово.

Прямо сейчас, после успешного завершения, вы проверяете следующие учетные данные, и они недействительны, и сбрасываете ваш «успех».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...