C#字典不起作用,将输入与键值对进行比较时,只有最后一对有效

问题描述 投票:0回答:1

我正在尝试进行基本的登录密码验证,并且制作了字典来存储凭据。如果我输入了上次登录名和密码,则可以使用,但对于其他任何对,它都无效。

<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。对于其他对,它不起作用,成功仍然是错误的。

c# html blazor
1个回答
0
投票

尝试调试该语句。将对每个条目的凭据分别处理for-each语句。这意味着每次迭代后,成功变量都会再次设置为true / false。当输入等于第一对或第二对证书时,它将在最后一次迭代中被覆盖,从而导致成功设置为false。

成功设置为true时,您需要打破foreach循环。

success = false;
foreach (var item in creds)
{
   if (login == item.key && password == item.value)
   {
      success = true;
      break;
   }
}

0
投票

设置成功= true后,您需要停止

它仅在最后一对中起作用,因为它恰好是最后一对并且您停止了:)

© www.soinside.com 2019 - 2024. All rights reserved.