为什么我的比较总是返回错误?
我在这个数组列表中有一堆用户名,我想检查用户名是否存在于数组列表中,但该方法总是返回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;
}
没有看到您的列表或您传递的信息,我们无法确定,但它可能是一个规范化问题。
Bob,bob,BOB,BOb等......在比较字符串时不一样。
与此更换您的if语句:
if(userList[i].ToString().ToLower() == username.ToLower())
{
return true;
}
是的,这是多亏了很多人的问题。 –
有几个原因,我能想到的,可能会导致该函数总是返回false。
您确定您的userList和username将始终具有相同的外壳吗?使用.ToLower()或.ToUpper()来确保套管匹配,除非您打算将套管作为匹配的一部分。
你确定任何一个字符串上没有额外的空格吗?当你比较可能有额外空格的字符串时,使用.Trim()是一个好习惯。
比较字符串时使用.Equals()方法比逻辑运算符==更可靠。偶尔逻辑运算符会产生不正确的结果。
你肯定你应该得到一个真正的结果吗?有没有可能一个字符串包含一个你不知道的隐藏字符?使用调试器检查字符串的值是肯定的。
如果你想做大小写不敏感的比较,'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);
}
邮政在用户列表和用户名值。 – BNL
为什么使用'ArrayList'而不是'List'? –
Oded
'=='区分大小写... – Marco