User999999
User999999

Reputation: 2520

Cast all keys in dictionary to uppercase

This is probably a very simple question but google has let me down sofar and keeps pointing me towards python solutions.

I have a webpage where applciations/users can supply querystringparameters.To Retrieve the querystring parameters I use the following code:

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

to check the presence of a specified key, I use the following code:

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

Knowing our users, i'm expecting them to give parameterkeys as follows: "Param1", "param1", "pArAm1" How can simply cast every key in a dictionary to uppercase without iterating each key-valuepair?

Or how can i alter the qStrings["PARAM1"] so it ignores the case?

Upvotes: 5

Views: 6431

Answers (4)

ANJYR
ANJYR

Reputation: 2623

Simplest Way

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

Upvotes: 2

takemyoxygen
takemyoxygen

Reputation: 4394

You can use StringComparer to find keys ignoring their case:

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

Upvotes: 9

cck3rry
cck3rry

Reputation: 211

Maybe you can do it like below:

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

Upvotes: 1

Zaid Amir
Zaid Amir

Reputation: 4775

Without iterating is not possible. No matter what approach you use there is going to be some sort of iteration. The this is you need to limit the insertion of the data to a single unified casing rather than allowing users to input all sorts of casing.

Taking your example: "Param1", "param1", "pArAm1", a key will be created for each single one of these as they are treated as separate entities. The best way to handle that is to force the casing at the insertion rather than when querying for values.

For example:

void AddToDictionary(string key, string value)
{
   qStrings[key.ToUpper()] = value;
}

Upvotes: -1

Related Questions