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

我在下面介绍了我的方法和用户输出。我正在打印哈希值以进行故障排除

下面是哈希匹配但不匹配的用户输出示例: 如果哈希第一次不匹配,它不会改变行为

密码认证系统

请选择一个选项:

  • 开户
  • 验证用户身份
  • 退出系统
  • 输入选择:1 输入您的用户名:username

    输入密码: 用户名,5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8]

    密码认证系统

    请选择一个选项:

  • 开户
  • 验证用户身份
  • 退出系统
  • 输入选择:2 输入您要验证的用户名 用户名:Username

    输入密码: 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 已成功验证为用户名

    密码认证系统

    请选择一个选项:

  • 开户
  • 验证用户身份
  • 退出系统
  • 输入选择:2 输入您要验证的用户名 用户名:Username

    输入密码: 152F66D0FE3A409590EC40FEA1EE037CEFB4549A1F51DEFD16824117A768B1D 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8

    已成功验证为用户名

    下面是身份验证方法
    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
    变量。

    谢谢!这是有道理的。我必须找到另一种方法/属性的组合来实现我想要的。