C#比较不同大小写的字符串

时间:2010-06-25 15:14:00

标签: c# string comparison case-insensitive

我正在读一个用户名,然后检查是否存在于另一个数据库表中,问题是虽然用户名是相同的,但情况可能不同,并阻止它找到匹配示例jsmith和JSmith或JSMITH。 / p>

我该如何解决这个问题?我应该在写入第一个数据库时降低大小写,还是在我比较这两个数据库时可以改变下面的代码?

drUser["Enrolled"] = 
    (enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);

更新:

仍在努力解决这个问题,下面的代码编译但没有给出正确的结果,在查看注册用户时,我看到那些未注册的用户,在查看未注册的用户时,我看到1已注册但是用户名每个数据库中的大小写相同。我是否正确格式化了以下代码?

drUser["Enrolled"] = (enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));

由于 杰米

5 个答案:

答案 0 :(得分:21)

您需要调整Equals method,这需要StringComparison参数。

例如:

x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)

如果x.Username可以是null,则应拨打static Equals method

String.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase)

否则,x.Username.Equals可以抛出NullReferenceException

答案 1 :(得分:3)

执行此操作的首选方法是使用

之类的内容指定字符串比较
string.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase

进行等式检查,而不是“==”

答案 2 :(得分:0)

如何使用ToUpper()。

 if(!(dr["Enrolled"] == null || dr["Username"] == null))
 {
    if(dr["Enrolled"].ToString().ToUpperInvariant()== dr["Username"].ToString().ToUpperInvariant())
    {
        //Do Something
    }
}

答案 3 :(得分:0)

你试过这个吗?

string userName = (string)drUser["Username"];
bool enrolled = enrolledUsers.Exists(x =>
  string.Equals(x.Name, userName, StringComparison.CurrentCultureIgnoreCase));

您是否有使用FindIndex的原因?

答案 4 :(得分:0)

尝试使用string.compare方法。 all overloads

或更多specific one

如果不出意外,我希望它可以教育。