Это довольно тривиально, используя LINQ:
int key = new Dictionary<int,string>().Where((kv)=>kv.Value == "SomeValue").Select(kv=>kv.Key).FirstOrDefault();
И метод расширения, если вам нравится:
static class DictionaryExtensions {
public static bool TryFindByValue<TKey, TValue>(this IDictionary<TKey, TValue> dict, TValue value, out TKey key) {
var keys = dict.Where((kv) => kv.Value.Equals(value)).Select(kv => kv.Key);
bool retValue = keys.Any();
key = keys.FirstOrDefault();
return retValue;
}
}
Также вы можете реализовать IDictionary
, делегировать два Dictionary
объекта (один для сопоставления ключ-значение и один для сопоставления ключ-значение) для резервного хранилища и иметь ограничение на Add
, что значения Должно быть уникальным. Таким образом, вы гарантируете, что будет не более одной записи с определенным значением. РЕДАКТИРОВАТЬ Использование двух словарей улучшит время доступа (спасибо @SamStephens), так как ключи и значения будут храниться в упорядоченной хеш-таблице.