【发布时间】:2010-06-25 15:13:59
【问题描述】:
我正在读取用户名,然后检查是否存在于另一个数据库表中,问题是用户名相同但大小写可能不同,并阻止它找到匹配示例 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)));
谢谢 杰米
【问题讨论】:
-
该死,我太慢了。认为我回答这个问题比较合适.. ;)
-
@SLaks 他的示例名称.. 是我的用户名.. :)
-
@Jamie:当我遇到看起来应该有效但无效的代码时,我发现分解它并检查我的所有假设很有帮助。 IE。当您比较两个字符串时,Equals() 是否符合您的预期(如下文所述,文化设置会有所不同)。如果可行,则检查 FindIndex 是否适用于完全匹配。等等等等。
-
您可能想使用 Exists() 之类的东西,请参阅下面的答案。
-
值得注意的是,对于某些字符集,转换为大写而不是小写更有效。此外,这正是存储过程的用途。
标签: c# string comparison case-insensitive