我只是在if语句中比较2个字符串,但它认为它不相同。
public Boolean checkusn(String username)
{
MySqlDataReader reader = sendcmd("SELECT username FROM `users`");
Boolean taken = true;
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
Console.Write(reader.GetString(i) + " " + username + " ");
if (username == reader.GetString(i))
{
taken = false;
label17.Text = "Username already taken";
}
else
{
taken = true;
label17.Text = "Username not taken";
}
}
}
return taken;
}
输出是这样的:
hayhay hayhay test hayhay
因此它将hayhay与hayhay和hayhay进行了比较测试。 但它并不认为它们是一样的......
答案 0 :(得分:3)
当你采取= = true时,你应该离开循环。 现在,您始终只返回表中最后一个元素的bool值。
答案 1 :(得分:2)
我简化了解决问题的方法,希望能够更轻松地维护和理解。变更包括:
代码缩减
let ref = Firebase(url:"https://<firebase-id>.firebaseio.com/services")
ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
// do some stuff once
print(snapshot.value)
// get these values and put them in the cell's text view. key is more important
print(snapshot.key)
// add to the array and just this array
self.items.append(snapshot.key)
self.tableView!.reloadData()
})
您可以通过直接从数据库返回用户名UPPER CASED和TRIMMED来进一步改进。另请注意,您不会考虑参数用户名可能为NULL或为空的情况。
通过计算找到匹配的次数,您可以根据需要执行其他操作。因此,不要立即断开你的循环。
我不是你在那里使用的MySQL阅读器的专家,但是当你返回一个字段时,你在字段上做FOR循环看起来有点奇怪 - 我猜你实际上可以取消你的FOR循环完全是:
public bool checkusn(String username)
{
MySqlDataReader reader = sendcmd("SELECT username FROM `users`");
int foundCount = 0;
string usernamePassedIn = username.Trim().ToUpper();
while (reader.Read() && foundCount == 0)
{
for (int i = 0; i < reader.FieldCount; i++)
{
string usernameReadFromDb = reader.GetString(i).Trim().ToUpper();
if (usernamePassedIn == usernameReadFromDb)
foundCount++;
if (foundCount > 0)
break;
}
}
label17.Text = foundCount > 1 ? "Username already taken" : "Username not taken";
return foundCount > 0;
}
答案 2 :(得分:0)
不要使用==
比较字符串时,应使用明确指定要执行的比较类型的方法。这使您的代码更易于维护和读取。尽可能使用带有StringComparison枚举参数的System.String和System.Array类的方法的重载,以便您可以指定要执行的比较类型。在比较字符串时,最好避免使用==和!=运算符。另外,请避免使用String.CompareTo实例方法,因为没有任何重载采用StringComparison。