C# – get dictionary key by value


How do I get a Dictionary key by value in C#?

Dictionary<string, string> types = new Dictionary<string, string>()
            {"1", "one"},
            {"2", "two"},
            {"3", "three"}

I want something like this:

getByValueKey(string value);

getByValueKey("one") must be return "1".

What is the best way do this? Maybe HashTable, SortedLists?

Best Solution

Values not necessarily have to be unique so you have to do a lookup. You can do something like this:

var myKey = types.FirstOrDefault(x => x.Value == "one").Key;

If values are unique and are inserted less frequently than read, then create an inverse dictionary where values are keys and keys are values.