当我必须使用namevaluecollection进行评估时,如何找到密钥?

时间:2013-05-13 23:42:05

标签: c# .net search

我为此花了大约二十分钟。如果这是重复,请原谅我。

所以我正在从app.config文件中读取并拥有一堆键/值对

{'a','1'},{'b','5'},{'c','9'} ... etc

在给出键时很容易找到值。但反向证明比我想象的要困难得多。

奇怪的是,msdn上的api似乎没有提到反向搜索的任何内容 如果你被允许的话,如果只给你“1”,你会如何找到钥匙的价值?

2 个答案:

答案 0 :(得分:4)

我能想到的最好的方法是在AllKeys属性上使用Linq:

myNameValueCollection.AllKeys.First(key => myNameValueCollection[key] == myValue);

遗憾的是,NameValueCollection未实施IEnumerable<KeyValuePair<string, string>>

我从你的评论中看出你对Linq不太熟悉。我在评论中提供了一些链接,以帮助您前进。这个特殊的Linq查询大致相当于以下内容,非常简洁:

foreach(var key in myNameValueCollection.AllKeys)
{
    var value = myNameValueCollection.AllKeys[key];
    if (value == myValue)
    {
        return value;
    }
}

答案 1 :(得分:1)

当然这是一条单行道,因为散列函数应用于键而不是值。但是,如果你的价值观是不同的,那么就有明显的工作方法(请记住,他们不必这样做)。欧根在评论中的建议可能是最好的,如果你要反复按价值观察。如果您正在寻找更多的一次性解决方案,您可以循环检查密钥以检查值的匹配。当值匹配时,您知道它与哪个键相关联。