С# Сравнение строк с различным случаем
Я читаю имя пользователя, а затем проверяю, существует ли в другой таблице базы данных, проблема в том, что имя пользователя совпадает с тем случаем, которое может быть другим, и мешает ему найти пример соответствия jsmith и JSmith или JSMITH.
Как я могу это исправить? Должен ли я уменьшить регистр при записи в первую базу данных или изменить код ниже, когда я сравниваю эти два?
drUser["Enrolled"] =
(enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);
UPDATE:
Все еще борясь с этим, приведенный ниже код компилируется, но не дает правильного результата при просмотре зарегистрированных пользователей. Я вижу те, которые не зарегистрированы, при просмотре тех, которые не зарегистрированы. Я вижу 1, который зарегистрирован, но их имя пользователя случай одинаковый в каждом datababse. Я правильно отформатировал код ниже?
drUser["Enrolled"] = (enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));
Спасибо
Джейми
Ответы
Ответ 1
Вам нужно выполнить метод Equals
, который принимает параметр StringComparison
.
Например:
x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)
Если x.Username
может быть null
, вы должны вызвать метод static Equals
:
String.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase)
В противном случае x.Username.Equals
может выбросить NullReferenceException
.
Ответ 2
Предпочтительный способ сделать это - указать сравнение строк, используя что-то вроде
string.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase
чтобы выполнить проверку равенства вместо "=="
Ответ 3
Как использовать ToUpper().
if(!(dr["Enrolled"] == null || dr["Username"] == null))
{
if(dr["Enrolled"].ToString().ToUpperInvariant()== dr["Username"].ToString().ToUpperInvariant())
{
//Do Something
}
}
Ответ 4
Вы пробовали это?
string userName = (string)drUser["Username"];
bool enrolled = enrolledUsers.Exists(x =>
string.Equals(x.Name, userName, StringComparison.CurrentCultureIgnoreCase));
Есть ли причина, по которой вы используете FindIndex?
Ответ 5
попробуйте метод string.compare.
все перегрузки
Или более конкретный
Если ничего другого, я надеюсь, что он воспитывает.