我在这个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;
}
答案 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。
您确定您的userList和用户名将始终具有相同的大小写吗?使用.ToLower()或.ToUpper()确保套管匹配是一个好习惯,除非您打算将套管作为匹配的一部分。
你确定两个字符串上都没有额外的空格吗?当您比较可能存在额外空格的字符串时,最好使用.Trim()。
比较字符串时使用.Equals()方法比逻辑运算符==更可靠。有时逻辑运算符会产生不正确的结果。
你是否肯定会得到真正的结果?是否有可能一个字符串包含您不知道的隐藏字符?使用调试器检查字符串的值以确定。