Приведите все ключи в словаре в верхний регистр

Вероятно, это очень простой вопрос, но Google подвел меня, и продолжает указывать на решения Python.

У меня есть веб-страница, на которой приложения / пользователи могут предоставить querystringparameters. Для получения параметров строки запроса я использую следующий код:

IDictionary<string, string> qStrings = HtmlPage.Document.QueryString;

Чтобы проверить наличие указанного ключа, я использую следующий код:

if (!String.IsNullOrEmpty(qStrings["PARAM1"]))
{}

Зная наших пользователей, я ожидаю, что они предоставят ключи параметров следующим образом: "Param1", "param1", "pArAm1". Как можно просто привести каждый ключ в словаре в верхний регистр, не повторяя каждую пару ключ-значение?

Или как я могу изменить qStrings["PARAM1"] так это игнорирует дело?

3 ответа

Решение

Ты можешь использовать StringComparer найти ключи, игнорирующие их регистр:

var qStrings = new Dictionary<string, string>(
    HtmlPage.Document.QueryString,
    StringComparer.OrdinalIgnoreCase)

Самый простой способ

qStrings = qStrings .ToDictionary(k => k.Key.ToUpper(), k => k.Value.ToUpper());

Может быть, вы можете сделать это, как показано ниже:

Dictionary<string, string> qStrings = new Dictionary<string, string>();
foreach (var a in qStrings.Keys)
{
    switch (a.ToUpper())
    {
        case "PARAM1":
            break;
    }
}

Без итерации невозможно. Независимо от того, какой подход вы используете, будет какая-то итерация. Это - то, что вам нужно ограничить вставку данных в один унифицированный корпус, а не позволять пользователям вводить все виды корпусов.

Принимая ваш пример: "Param1", "param1", "pArAm1"для каждого из них будет создан ключ, поскольку они рассматриваются как отдельные объекты. Лучший способ справиться с этим - принудительно использовать регистр при вставке, а не при запросе значений.

Например:

void AddToDictionary(string key, string value)
{
   qStrings[key.ToUpper()] = value;
}
Другие вопросы по тегам