Приведите все ключи в словаре в верхний регистр
Вероятно, это очень простой вопрос, но 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;
}