ASP.Net Сравнение строк — Странная проблема — происходит случайным образом

#asp.net #string-comparison

#asp.net #сравнение строк

Вопрос:

У меня есть фрагмент кода, который определяет, является ли зарегистрированный пользователь участником или нет. По какой-то причине — даже если в коллекции ролей есть «Член» — код достигает конечного оператора return.

Это событие встречается редко — и точные обстоятельства каждый раз разные (обновление web.config иногда / очистка asp.net временные файлы иногда) —

 private bool isLoggedInUserMember()
{
    string[] Roles = { "Member", "Professional" }; //In real code - this is pulled from the db
    foreach (string role in Roles)
    {
        if (role.Trim().ToLower().Equals("member"))
            return true;
    }
    return false; //sometimes the code reaches here 
}
  

Итак, мой вопрос — знаете ли вы о каких-либо ошибках .net, которые возникают при использовании Trim().ToLower() или любая такая последовательность?

Это ASP.Net Приложение веб-сайта, работающее на платформе 3.5

Спасибо!

Комментарии:

1. Добавьте некоторый код протоколирования, чтобы увидеть, что Roles равно в производстве. Скорее всего, это не «Член».

2. Также используйте StringComparison.OrdinalIgnoreCase вместо ToLower для выполнения сравнения строк без учета регистра.