12

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

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

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)));

谢谢杰米

4

5 回答 5

21

您需要调用带有参数的Equals方法。StringComparison

例如:

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

如果x.Username可以null的话,你应该调用静态Equals方法

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

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

于 2010-06-25T15:15:18.757 回答
3

这样做的首选方法是使用类似的东西来指定字符串比较

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

做平等检查,而不是“==”

于 2010-06-25T15:16:50.160 回答
0

尝试 string.compare 方法。 所有重载

或者更具体的

如果没有别的,我希望它有教育意义。

于 2010-06-25T18:06:06.650 回答
0

你试过这个吗?

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

您是否有理由使用 FindIndex 代替?

于 2010-06-25T16:39:05.167 回答
0

使用 ToUpper() 怎么样。

 if(!(dr["Enrolled"] == null || dr["Username"] == null))
 {
    if(dr["Enrolled"].ToString().ToUpperInvariant()== dr["Username"].ToString().ToUpperInvariant())
    {
        //Do Something
    }
}
于 2010-06-25T15:53:06.647 回答