为什么我的比较总是返回false

本文关键字:返回 false 我的 比较 为什么 | 更新日期: 2023-09-27 18:15:54

我在这个数组列表中有一堆用户名我想检查username在数组列表中是否存在但是方法总是返回false

public bool check_username(ArrayList userList, string username)
{           
    for (int i = 0; i < userList.Count; i++)
    {
        if (userList[i].ToString() == username)
        {
            return true;
        }
    }
    return false;
} 

为什么我的比较总是返回false

考虑使字符串比较不区分大小写。

username.Equals(userList[i].ToString(), StringComparison.OrdinalIgnoreCase);

或者,假设你的ArrayList userList的所有元素都是字符串,并且你使用的是。net 3.5或更高版本,你可以使用LINQ:

来简化这一点。
public bool check_username(ArrayList userList, string username)
{ 
    return userList.Cast<string>()
           .Any(s => s.Equals(username, StringComparison.OrdinalIgnoreCase); 
} 

如果没有看到您的列表或您传递的内容,我们无法确定,但这可能是一个标准化问题。

Bob, Bob, Bob, Bob等等…

将if语句替换为:

if(userList[i].ToString().ToLower() == username.ToLower())
{
     return true;
}

我能想到的几个原因可能导致该函数总是返回false。

  1. 你确定你的userList和username总是有相同的大小写吗?使用。tolower()或。toupper()来确保大小写匹配是一个很好的做法,除非您打算将大小写作为匹配的一部分。

  2. 您确定两个字符串上没有额外的空白吗?当您比较可能存在额外空白的字符串时,使用. trim()是一个很好的做法。

  3. 在比较字符串时使用。equals()方法比逻辑运算符==更可靠。有时逻辑运算符会产生错误的结果。

  4. 你确定你应该得到一个真实的结果吗?是否有可能一个字符串包含一个您不知道的隐藏字符?

  5. 使用调试器检查字符串的值是否正确。