C#用户名比较(2个字符串)

时间:2016-04-10 23:55:17

标签: c# mysql string visual-studio username

哎呀,所以我觉得我错过了一些完全明显的东西。我只需要一双新眼睛来看它,我很累。

我只是在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进行了比较测试。 但它并不认为它们是一样的......

3 个答案:

答案 0 :(得分:3)

当你采取= = true时,你应该离开循环。 现在,您始终只返回表中最后一个元素的bool值。

答案 1 :(得分:2)

我简化了解决问题的方法,希望能够更轻松地维护和理解。变更包括:

  • 纠正逻辑错误(找到时断开循环)
  • 确保传入参数实际上是以某种方式验证的(至少现在删除了前导/尾随空格)
  • 明确地进行不区分大小写的比较(如果您愿意,可以使用string.compare)
  • 代码缩减

    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)

不要使用==

从此MSDN article

  

比较字符串时,应使用明确指定要执行的比较类型的方法。这使您的代码更易于维护和读取。尽可能使用带有StringComparison枚举参数的System.String和System.Array类的方法的重载,以便您可以指定要执行的比较类型。在比较字符串时,最好避免使用==和!=运算符。另外,请避免使用String.CompareTo实例方法,因为没有任何重载采用StringComparison。