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

时间:2011-11-26 19:03:31

标签: c#

我在这个arraylist中有很多用户名,我想检查arraylist中是否存在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;
} 

3 个答案:

答案 0 :(得分:4)

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

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); 
} 

答案 1 :(得分:1)

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

Bob,bob,BOB,BOb等......在比较字符串时并不相同。

将if语句替换为:

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

答案 2 :(得分:1)

我可以想到有几个原因导致该函数始终返回false。

  1. 您确定您的userList和用户名将始终具有相同的大小写吗?使用.ToLower()或.ToUpper()确保套管匹配是一个好习惯,除非您打算将套管作为匹配的一部分。

  2. 你确定两个字符串上都没有额外的空格吗?当您比较可能存在额外空格的字符串时,最好使用.Trim()。

  3. 比较字符串时使用.Equals()方法比逻辑运算符==更可靠。有时逻辑运算符会产生不正确的结果。

  4. 你是否肯定会得到真正的结果?是否有可能一个字符串包含您不知道的隐藏字符?使用调试器检查字符串的值以确定。