我正在尝试进行基本的登录密码验证,并且制作了字典来存储凭据。如果我输入了上次登录名和密码,则可以使用,但对于其他任何对,它都无效。
<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。对于其他对,它不起作用,成功仍然是错误的。
尝试调试该语句。将对每个条目的凭据分别处理for-each语句。这意味着每次迭代后,成功变量都会再次设置为true / false。当输入等于第一对或第二对证书时,它将在最后一次迭代中被覆盖,从而导致成功设置为false。
成功设置为true时,您需要打破foreach循环。
success = false;
foreach (var item in creds)
{
if (login == item.key && password == item.value)
{
success = true;
break;
}
}
设置成功= true后,您需要停止
它仅在最后一对中起作用,因为它恰好是最后一对并且您停止了:)