Dictionary 为什么是字典<;TKey,TValue>;。TryGetValue(TKey,TValue)是否总是返回true?
我正在尝试使用Dictionary 为什么是字典<;TKey,TValue>;。TryGetValue(TKey,TValue)是否总是返回true?,dictionary,authentication,boolean,keyvaluepair,trygetvalue,Dictionary,Authentication,Boolean,Keyvaluepair,Trygetvalue,我正在尝试使用Dictionary.TryGetValue()在字典中搜索用户名和密码哈希,如果匹配,则验证用户,如果不匹配,则执行其他操作 我遇到的问题是,只要哈希值与字典中的值不匹配,它就会返回true,可能是因为它匹配了用户名键? 如果只有键匹配,但该值不匹配,则该行为是否应返回true 我在下面介绍了我的方法和用户输出。我正在打印哈希值以进行故障排除 下面是哈希匹配但不匹配的用户输出示例: 如果哈希第一次不匹配,它不会改变行为 密码认证系统 请选择一个选项: 开户 验证用户身份 退出系统
Dictionary.TryGetValue()
在字典中搜索用户名和密码哈希,如果匹配,则验证用户,如果不匹配,则执行其他操作
我遇到的问题是,只要哈希值与字典中的值不匹配,它就会返回true,可能是因为它匹配了用户名键?
如果只有键匹配,但该值不匹配,则该行为是否应返回true
我在下面介绍了我的方法和用户输出。我正在打印哈希值以进行故障排除
下面是哈希匹配但不匹配的用户输出示例:
如果哈希第一次不匹配,它不会改变行为
密码认证系统
请选择一个选项:
static void authUser(字符串用户名)
{
如果(!passDB.ContainsKey(用户名))
WriteLine($“Username\”{Username}\“不存在。”);
else if(passDB.ContainsKey(用户名))
{
串秘密;
字符串testHash;
int tryCount=4;
做
{
secret=HidePassInput();
SHA256 sha256Hash=SHA256.Create();
testHash=GetHash(sha256Hash,secret);
Console.WriteLine(testHash);
if(passDB.TryGetValue(用户名,out testHash))
{
Console.WriteLine(testHash);
WriteLine($“已成功验证为{userName}\n”);
tryCount=0;
}
其他的
{
tryCount--;
Console.WriteLine($”未能以{userName}身份进行身份验证。{tryCount}还有更多尝试。\n”);
}
}而(tryCount>0);
}
}
您似乎误解了TryGetValue
方法的使用
第一个参数是要获取其值的键。第二个参数是out
参数。如果该键存在,它的值将被分配给您用作out
参数参数的变量。testHash
保存的任何值都将被覆盖
TryGetValue
未收到您正在查找的值。它只接收一个密钥。如果找到该键,则返回true,否则返回false。找到的键的值被分配给out
变量。谢谢!这是有道理的。我必须找到另一种方法/属性的组合来实现我想要的。