比如说Dictionary<string, string> openWith = 
    new Dictionary<string, string>();openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");那我能通过value值比如说“notepad.exe”找到key:“txt”么?

解决方案 »

  1.   

    可以是可以,需要遍历。var findKey = "";
    foreach(var kv in dict)
    {
       if (kv.Value == "notepad.exe")
       {
          findKey = kv.Key;
          break;
       }
    }
      

  2.   

    也许你应该重新考虑下数据的设计,openWith.Add("bmp", "paint.exe");
    openWith.Add("dib", "paint.exe")相同的value,你希望返回哪个key呢?BTW: 上面的Dictionary,如果用linq写起来更简洁些:
    var key = dict.First(kv => kv.Value == "notepad.exe").Key;
      

  3.   

    如下函数,应用于任何继承相应IDictionary<TKey, TValue>的类
            static IEnumerable<TKey> FindKeysFromValue<TKey, TValue>(IDictionary<TKey, TValue> dic, TValue value)
            {
                if (dic == null)
                    return Enumerable.Empty<TKey>();
                return dic.TakeWhile(pair => pair.Value.Equals(value)).Select(pair => pair.Key);
            }
      

  4.   

    Dim Dstr(0) as String
    得到字典中的以“WA”为键的值
    statecaps.TryGetValue("WA",dstr)