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

问题描述:

我在这个数组列表中有一堆用户名,我想检查用户名是否存在于数组列表中,但该方法总是返回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; 
} 
+1

邮政在用户列表和用户名值。 – BNL

+3

为什么使用'ArrayList'而不是'List '? – Oded

+1

'=='区分大小写... – Marco

没有看到您的列表或您传递的信息,我们无法确定,但它可能是一个规范化问题。

Bob,bob,BOB,BOb等......在比较字符串时不一样。

与此更换您的if语句:

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

是的,这是多亏了很多人的问题。 –

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

  1. 您确定您的userList和username将始终具有相同的外壳吗?使用.ToLower()或.ToUpper()来确保套管匹配,除非您打算将套管作为匹配的一部分。

  2. 你确定任何一个字符串上没有额外的空格吗?当你比较可能有额外空格的字符串时,使用.Trim()是一个好习惯。

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

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

+0

如果你想做大小写不敏感的比较,'String.Equals(a,b,StringComparison.CurrentCultureIgnoreCase)'是一个很好的方法。 –

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

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

或者,假设你的ArrayList用户列表中的所有元素都是字符串,并且你使用.NET 3.5或更高版本,可以简化这个使用LINQ:

public bool check_username(ArrayList userList, string username) 
{ 
    return userList.Cast<string>() 
      .Any(s => s.Equals(username, StringComparison.OrdinalIgnoreCase); 
}